// export Game_Type ; export def_base_level , def_amount_of_people , def_initial_level , def_starting_resources , def_shipments_density , def_extra_oil_deposits , def_shared_vision , def_morale_flags , def_siberite_detection , def_amount_of_apemen , def_people_respawning , def_siberite_bomb ; export is_depot , number_of_breastworks , number_of_people , initial_level , starting_crates , starting_resources , shipments_density , morale_decreasing_time , spawning_koef_of_apemen , respawning_time_min , respawning_time_max ; export def_artefact_one , def_artefact_two , def_artefact_three , def_artefact_two_using , def_kings_age , def_public_score , def_builduptime ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams , Side_IsSpec ; export Side_Positions , Side_Nations , Side_Names , Team_Names , Team_Game ; export depot_def , breastworks_def , start_def , extra_oil_deposits_locations , battle_flags_id , def_max_sides ; export commander ; var global_units , global_defined , soldiers_created ; function init_map ; var i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
// if not def_extra_oil_deposits then
   4: LD_EXP 7
   8: NOT
   9: IFFALSE 50
// for i in extra_oil_deposits_locations do
  11: LD_ADDR_VAR 0 2
  15: PUSH
  16: LD_EXP 47
  20: PUSH
  21: FOR_IN
  22: IFFALSE 48
// RemoveDepositXY ( i [ 1 ] , i [ 2 ] ) ;
  24: LD_VAR 0 2
  28: PUSH
  29: LD_INT 1
  31: ARRAY
  32: PPUSH
  33: LD_VAR 0 2
  37: PUSH
  38: LD_INT 2
  40: ARRAY
  41: PPUSH
  42: CALL_OW 63
  46: GO 21
  48: POP
  49: POP
// end ;
  50: LD_VAR 0 1
  54: RET
// function read_multiplayer_and_game_parameters ; var side , dep , br1 , br2 , br3 , un , i ; begin
  55: LD_INT 0
  57: PPUSH
  58: PPUSH
  59: PPUSH
  60: PPUSH
  61: PPUSH
  62: PPUSH
  63: PPUSH
  64: PPUSH
// if MultiPlayer then
  65: LD_OWVAR 4
  69: IFFALSE 143
// begin Game_Type = mp_game_type ;
  71: LD_ADDR_EXP 1
  75: PUSH
  76: LD_OWVAR 6
  80: ST_TO_ADDR
// Player_Side = mp_player_side ;
  81: LD_ADDR_EXP 34
  85: PUSH
  86: LD_OWVAR 7
  90: ST_TO_ADDR
// Player_Team = mp_player_team ;
  91: LD_ADDR_EXP 35
  95: PUSH
  96: LD_OWVAR 8
 100: ST_TO_ADDR
// Side_Positions = mp_sides_positions ;
 101: LD_ADDR_EXP 39
 105: PUSH
 106: LD_OWVAR 17
 110: ST_TO_ADDR
// Side_Teams = mp_sides_teams ;
 111: LD_ADDR_EXP 36
 115: PUSH
 116: LD_OWVAR 15
 120: ST_TO_ADDR
// Side_Nations = mp_sides_nations ;
 121: LD_ADDR_EXP 40
 125: PUSH
 126: LD_OWVAR 16
 130: ST_TO_ADDR
// Teams = mp_teams ;
 131: LD_ADDR_EXP 37
 135: PUSH
 136: LD_OWVAR 12
 140: ST_TO_ADDR
// end else
 141: GO 291
// begin Game_Type = 2 ;
 143: LD_ADDR_EXP 1
 147: PUSH
 148: LD_INT 2
 150: ST_TO_ADDR
// Player_Side = 4 ;
 151: LD_ADDR_EXP 34
 155: PUSH
 156: LD_INT 4
 158: ST_TO_ADDR
// Player_Team = 1 ;
 159: LD_ADDR_EXP 35
 163: PUSH
 164: LD_INT 1
 166: ST_TO_ADDR
// Side_Positions = [ 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 ] ;
 167: LD_ADDR_EXP 39
 171: PUSH
 172: LD_INT 1
 174: PUSH
 175: LD_INT 2
 177: PUSH
 178: LD_INT 3
 180: PUSH
 181: LD_INT 4
 183: PUSH
 184: LD_INT 5
 186: PUSH
 187: LD_INT 0
 189: PUSH
 190: LD_INT 0
 192: PUSH
 193: LD_INT 0
 195: PUSH
 196: EMPTY
 197: LIST
 198: LIST
 199: LIST
 200: LIST
 201: LIST
 202: LIST
 203: LIST
 204: LIST
 205: ST_TO_ADDR
// Side_Teams = [ 1 , 2 , 3 , 4 , 5 , 0 , 0 , 0 ] ;
 206: LD_ADDR_EXP 36
 210: PUSH
 211: LD_INT 1
 213: PUSH
 214: LD_INT 2
 216: PUSH
 217: LD_INT 3
 219: PUSH
 220: LD_INT 4
 222: PUSH
 223: LD_INT 5
 225: PUSH
 226: LD_INT 0
 228: PUSH
 229: LD_INT 0
 231: PUSH
 232: LD_INT 0
 234: PUSH
 235: EMPTY
 236: LIST
 237: LIST
 238: LIST
 239: LIST
 240: LIST
 241: LIST
 242: LIST
 243: LIST
 244: ST_TO_ADDR
// Side_Nations = [ 3 , 2 , 1 , 1 , 2 , 0 , 0 , 0 ] ;
 245: LD_ADDR_EXP 40
 249: PUSH
 250: LD_INT 3
 252: PUSH
 253: LD_INT 2
 255: PUSH
 256: LD_INT 1
 258: PUSH
 259: LD_INT 1
 261: PUSH
 262: LD_INT 2
 264: PUSH
 265: LD_INT 0
 267: PUSH
 268: LD_INT 0
 270: PUSH
 271: LD_INT 0
 273: PUSH
 274: EMPTY
 275: LIST
 276: LIST
 277: LIST
 278: LIST
 279: LIST
 280: LIST
 281: LIST
 282: LIST
 283: ST_TO_ADDR
// Teams = [ ] ;
 284: LD_ADDR_EXP 37
 288: PUSH
 289: EMPTY
 290: ST_TO_ADDR
// end ; Side_IsSpec := [ false , false , false , false , false , false , false , false ] ;
 291: LD_ADDR_EXP 38
 295: PUSH
 296: LD_INT 0
 298: PUSH
 299: LD_INT 0
 301: PUSH
 302: LD_INT 0
 304: PUSH
 305: LD_INT 0
 307: PUSH
 308: LD_INT 0
 310: PUSH
 311: LD_INT 0
 313: PUSH
 314: LD_INT 0
 316: PUSH
 317: LD_INT 0
 319: PUSH
 320: EMPTY
 321: LIST
 322: LIST
 323: LIST
 324: LIST
 325: LIST
 326: LIST
 327: LIST
 328: LIST
 329: ST_TO_ADDR
// Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 330: LD_ADDR_EXP 32
 334: PUSH
 335: LD_EXP 39
 339: PUSH
 340: LD_INT 0
 342: PUSH
 343: EMPTY
 344: LIST
 345: DIFF
 346: PUSH
 347: LD_INT 0
 349: PLUS
 350: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 351: LD_ADDR_EXP 33
 355: PUSH
 356: LD_EXP 36
 360: PUSH
 361: LD_INT 0
 363: PUSH
 364: EMPTY
 365: LIST
 366: DIFF
 367: PUSH
 368: LD_INT 0
 370: PLUS
 371: ST_TO_ADDR
// if MultiPlayer then
 372: LD_OWVAR 4
 376: IFFALSE 627
// begin def_base_level = GetMultiplayerSetting ( 0 ) ;
 378: LD_ADDR_EXP 2
 382: PUSH
 383: LD_INT 0
 385: PPUSH
 386: CALL_OW 426
 390: ST_TO_ADDR
// def_amount_of_people = GetMultiplayerSetting ( 1 ) ;
 391: LD_ADDR_EXP 3
 395: PUSH
 396: LD_INT 1
 398: PPUSH
 399: CALL_OW 426
 403: ST_TO_ADDR
// def_initial_level = GetMultiplayerSetting ( 2 ) ;
 404: LD_ADDR_EXP 4
 408: PUSH
 409: LD_INT 2
 411: PPUSH
 412: CALL_OW 426
 416: ST_TO_ADDR
// def_starting_resources = GetMultiplayerSetting ( 3 ) ;
 417: LD_ADDR_EXP 5
 421: PUSH
 422: LD_INT 3
 424: PPUSH
 425: CALL_OW 426
 429: ST_TO_ADDR
// def_shipments_density = GetMultiplayerSetting ( 4 ) ;
 430: LD_ADDR_EXP 6
 434: PUSH
 435: LD_INT 4
 437: PPUSH
 438: CALL_OW 426
 442: ST_TO_ADDR
// def_extra_oil_deposits = GetMultiplayerSetting ( 5 ) ;
 443: LD_ADDR_EXP 7
 447: PUSH
 448: LD_INT 5
 450: PPUSH
 451: CALL_OW 426
 455: ST_TO_ADDR
// def_shared_vision = GetMultiplayerSetting ( 10 ) ;
 456: LD_ADDR_EXP 8
 460: PUSH
 461: LD_INT 10
 463: PPUSH
 464: CALL_OW 426
 468: ST_TO_ADDR
// def_morale_flags = GetMultiplayerSetting ( 11 ) ;
 469: LD_ADDR_EXP 9
 473: PUSH
 474: LD_INT 11
 476: PPUSH
 477: CALL_OW 426
 481: ST_TO_ADDR
// def_siberite_detection = GetMultiplayerSetting ( 12 ) ;
 482: LD_ADDR_EXP 10
 486: PUSH
 487: LD_INT 12
 489: PPUSH
 490: CALL_OW 426
 494: ST_TO_ADDR
// def_amount_of_apemen = GetMultiplayerSetting ( 13 ) ;
 495: LD_ADDR_EXP 11
 499: PUSH
 500: LD_INT 13
 502: PPUSH
 503: CALL_OW 426
 507: ST_TO_ADDR
// def_people_respawning = GetMultiplayerSetting ( 14 ) ;
 508: LD_ADDR_EXP 12
 512: PUSH
 513: LD_INT 14
 515: PPUSH
 516: CALL_OW 426
 520: ST_TO_ADDR
// def_siberite_bomb = GetMultiplayerSetting ( 15 ) ;
 521: LD_ADDR_EXP 13
 525: PUSH
 526: LD_INT 15
 528: PPUSH
 529: CALL_OW 426
 533: ST_TO_ADDR
// def_artefact_one = GetMultiplayerSetting ( 6 ) ;
 534: LD_ADDR_EXP 25
 538: PUSH
 539: LD_INT 6
 541: PPUSH
 542: CALL_OW 426
 546: ST_TO_ADDR
// def_artefact_two = GetMultiplayerSetting ( 7 ) ;
 547: LD_ADDR_EXP 26
 551: PUSH
 552: LD_INT 7
 554: PPUSH
 555: CALL_OW 426
 559: ST_TO_ADDR
// def_artefact_two_using = GetMultiplayerSetting ( 8 ) ;
 560: LD_ADDR_EXP 28
 564: PUSH
 565: LD_INT 8
 567: PPUSH
 568: CALL_OW 426
 572: ST_TO_ADDR
// def_artefact_three = GetMultiplayerSetting ( 9 ) ;
 573: LD_ADDR_EXP 27
 577: PUSH
 578: LD_INT 9
 580: PPUSH
 581: CALL_OW 426
 585: ST_TO_ADDR
// def_kings_age = GetMultiplayerSetting ( 16 ) ;
 586: LD_ADDR_EXP 29
 590: PUSH
 591: LD_INT 16
 593: PPUSH
 594: CALL_OW 426
 598: ST_TO_ADDR
// def_public_score = GetMultiplayerSetting ( 17 ) ;
 599: LD_ADDR_EXP 30
 603: PUSH
 604: LD_INT 17
 606: PPUSH
 607: CALL_OW 426
 611: ST_TO_ADDR
// def_builduptime = GetMultiplayerSetting ( 20 ) ;
 612: LD_ADDR_EXP 31
 616: PUSH
 617: LD_INT 20
 619: PPUSH
 620: CALL_OW 426
 624: ST_TO_ADDR
// end else
 625: GO 783
// begin randomize ;
 627: CALL_OW 10
// def_base_level = 2 ;
 631: LD_ADDR_EXP 2
 635: PUSH
 636: LD_INT 2
 638: ST_TO_ADDR
// def_amount_of_people = 1 ;
 639: LD_ADDR_EXP 3
 643: PUSH
 644: LD_INT 1
 646: ST_TO_ADDR
// def_initial_level = 1 ;
 647: LD_ADDR_EXP 4
 651: PUSH
 652: LD_INT 1
 654: ST_TO_ADDR
// def_starting_resources = 2 ;
 655: LD_ADDR_EXP 5
 659: PUSH
 660: LD_INT 2
 662: ST_TO_ADDR
// def_shipments_density = 1 ;
 663: LD_ADDR_EXP 6
 667: PUSH
 668: LD_INT 1
 670: ST_TO_ADDR
// def_extra_oil_deposits = 0 ;
 671: LD_ADDR_EXP 7
 675: PUSH
 676: LD_INT 0
 678: ST_TO_ADDR
// def_shared_vision = 1 ;
 679: LD_ADDR_EXP 8
 683: PUSH
 684: LD_INT 1
 686: ST_TO_ADDR
// def_morale_flags = 1 ;
 687: LD_ADDR_EXP 9
 691: PUSH
 692: LD_INT 1
 694: ST_TO_ADDR
// def_siberite_detection = 1 ;
 695: LD_ADDR_EXP 10
 699: PUSH
 700: LD_INT 1
 702: ST_TO_ADDR
// def_amount_of_apemen = 3 ;
 703: LD_ADDR_EXP 11
 707: PUSH
 708: LD_INT 3
 710: ST_TO_ADDR
// def_people_respawning = 2 ;
 711: LD_ADDR_EXP 12
 715: PUSH
 716: LD_INT 2
 718: ST_TO_ADDR
// def_siberite_bomb = 0 ;
 719: LD_ADDR_EXP 13
 723: PUSH
 724: LD_INT 0
 726: ST_TO_ADDR
// def_artefact_one = 0 ;
 727: LD_ADDR_EXP 25
 731: PUSH
 732: LD_INT 0
 734: ST_TO_ADDR
// def_artefact_two = 0 ;
 735: LD_ADDR_EXP 26
 739: PUSH
 740: LD_INT 0
 742: ST_TO_ADDR
// def_artefact_two_using = 2 ;
 743: LD_ADDR_EXP 28
 747: PUSH
 748: LD_INT 2
 750: ST_TO_ADDR
// def_artefact_three = 0 ;
 751: LD_ADDR_EXP 27
 755: PUSH
 756: LD_INT 0
 758: ST_TO_ADDR
// def_kings_age = 0 ;
 759: LD_ADDR_EXP 29
 763: PUSH
 764: LD_INT 0
 766: ST_TO_ADDR
// def_public_score = 0 ;
 767: LD_ADDR_EXP 30
 771: PUSH
 772: LD_INT 0
 774: ST_TO_ADDR
// def_builduptime = 1 ;
 775: LD_ADDR_EXP 31
 779: PUSH
 780: LD_INT 1
 782: ST_TO_ADDR
// end ; is_depot = [ 0 , 1 , 1 , 1 ] [ def_base_level + 1 ] ;
 783: LD_ADDR_EXP 14
 787: PUSH
 788: LD_INT 0
 790: PUSH
 791: LD_INT 1
 793: PUSH
 794: LD_INT 1
 796: PUSH
 797: LD_INT 1
 799: PUSH
 800: EMPTY
 801: LIST
 802: LIST
 803: LIST
 804: LIST
 805: PUSH
 806: LD_EXP 2
 810: PUSH
 811: LD_INT 1
 813: PLUS
 814: ARRAY
 815: ST_TO_ADDR
// number_of_breastworks = [ 0 , 0 , 2 , 3 ] [ def_base_level + 1 ] ;
 816: LD_ADDR_EXP 15
 820: PUSH
 821: LD_INT 0
 823: PUSH
 824: LD_INT 0
 826: PUSH
 827: LD_INT 2
 829: PUSH
 830: LD_INT 3
 832: PUSH
 833: EMPTY
 834: LIST
 835: LIST
 836: LIST
 837: LIST
 838: PUSH
 839: LD_EXP 2
 843: PUSH
 844: LD_INT 1
 846: PLUS
 847: ARRAY
 848: ST_TO_ADDR
// number_of_people = [ 6 , 9 , 12 , 15 , 24 , 30 ] [ def_amount_of_people + 1 ] ;
 849: LD_ADDR_EXP 16
 853: PUSH
 854: LD_INT 6
 856: PUSH
 857: LD_INT 9
 859: PUSH
 860: LD_INT 12
 862: PUSH
 863: LD_INT 15
 865: PUSH
 866: LD_INT 24
 868: PUSH
 869: LD_INT 30
 871: PUSH
 872: EMPTY
 873: LIST
 874: LIST
 875: LIST
 876: LIST
 877: LIST
 878: LIST
 879: PUSH
 880: LD_EXP 3
 884: PUSH
 885: LD_INT 1
 887: PLUS
 888: ARRAY
 889: ST_TO_ADDR
// initial_level = [ 2 , 3 , 4 , 5 , 9 ] [ def_initial_level + 1 ] ;
 890: LD_ADDR_EXP 17
 894: PUSH
 895: LD_INT 2
 897: PUSH
 898: LD_INT 3
 900: PUSH
 901: LD_INT 4
 903: PUSH
 904: LD_INT 5
 906: PUSH
 907: LD_INT 9
 909: PUSH
 910: EMPTY
 911: LIST
 912: LIST
 913: LIST
 914: LIST
 915: LIST
 916: PUSH
 917: LD_EXP 4
 921: PUSH
 922: LD_INT 1
 924: PLUS
 925: ARRAY
 926: ST_TO_ADDR
// starting_resources = [ [ 0 , 0 , 0 ] , [ 30 , 0 , 0 ] , [ 50 , 20 , 0 ] , [ 80 , 40 , 20 ] ] [ def_starting_resources + 1 ] ;
 927: LD_ADDR_EXP 19
 931: PUSH
 932: LD_INT 0
 934: PUSH
 935: LD_INT 0
 937: PUSH
 938: LD_INT 0
 940: PUSH
 941: EMPTY
 942: LIST
 943: LIST
 944: LIST
 945: PUSH
 946: LD_INT 30
 948: PUSH
 949: LD_INT 0
 951: PUSH
 952: LD_INT 0
 954: PUSH
 955: EMPTY
 956: LIST
 957: LIST
 958: LIST
 959: PUSH
 960: LD_INT 50
 962: PUSH
 963: LD_INT 20
 965: PUSH
 966: LD_INT 0
 968: PUSH
 969: EMPTY
 970: LIST
 971: LIST
 972: LIST
 973: PUSH
 974: LD_INT 80
 976: PUSH
 977: LD_INT 40
 979: PUSH
 980: LD_INT 20
 982: PUSH
 983: EMPTY
 984: LIST
 985: LIST
 986: LIST
 987: PUSH
 988: EMPTY
 989: LIST
 990: LIST
 991: LIST
 992: LIST
 993: PUSH
 994: LD_EXP 5
 998: PUSH
 999: LD_INT 1
1001: PLUS
1002: ARRAY
1003: ST_TO_ADDR
// starting_crates = [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
1004: LD_ADDR_EXP 18
1008: PUSH
1009: LD_INT 10
1011: PUSH
1012: EMPTY
1013: LIST
1014: PUSH
1015: LD_INT 7
1017: PUSH
1018: LD_INT 14
1020: PUSH
1021: EMPTY
1022: LIST
1023: LIST
1024: PUSH
1025: LD_INT 6
1027: PUSH
1028: LD_INT 12
1030: PUSH
1031: LD_INT 18
1033: PUSH
1034: EMPTY
1035: LIST
1036: LIST
1037: LIST
1038: PUSH
1039: LD_INT 5
1041: PUSH
1042: LD_INT 10
1044: PUSH
1045: LD_INT 15
1047: PUSH
1048: LD_INT 20
1050: PUSH
1051: EMPTY
1052: LIST
1053: LIST
1054: LIST
1055: LIST
1056: PUSH
1057: EMPTY
1058: LIST
1059: LIST
1060: LIST
1061: LIST
1062: PUSH
1063: LD_EXP 5
1067: PUSH
1068: LD_INT 1
1070: PLUS
1071: ARRAY
1072: ST_TO_ADDR
// shipments_density = [ 20 , 30 , 40 ] [ def_shipments_density + 1 ] ;
1073: LD_ADDR_EXP 20
1077: PUSH
1078: LD_INT 20
1080: PUSH
1081: LD_INT 30
1083: PUSH
1084: LD_INT 40
1086: PUSH
1087: EMPTY
1088: LIST
1089: LIST
1090: LIST
1091: PUSH
1092: LD_EXP 6
1096: PUSH
1097: LD_INT 1
1099: PLUS
1100: ARRAY
1101: ST_TO_ADDR
// spawning_koef_of_apemen = [ 0 , 165 , 140 , 115 ] [ def_amount_of_apemen + 1 ] ;
1102: LD_ADDR_EXP 22
1106: PUSH
1107: LD_INT 0
1109: PUSH
1110: LD_INT 165
1112: PUSH
1113: LD_INT 140
1115: PUSH
1116: LD_INT 115
1118: PUSH
1119: EMPTY
1120: LIST
1121: LIST
1122: LIST
1123: LIST
1124: PUSH
1125: LD_EXP 11
1129: PUSH
1130: LD_INT 1
1132: PLUS
1133: ARRAY
1134: ST_TO_ADDR
// respawning_time_min = [ 0 0$0 , 6 6$00 , 1 1$00 ] [ def_people_respawning + 1 ] ;
1135: LD_ADDR_EXP 23
1139: PUSH
1140: LD_INT 0
1142: PUSH
1143: LD_INT 12600
1145: PUSH
1146: LD_INT 2100
1148: PUSH
1149: EMPTY
1150: LIST
1151: LIST
1152: LIST
1153: PUSH
1154: LD_EXP 12
1158: PUSH
1159: LD_INT 1
1161: PLUS
1162: ARRAY
1163: ST_TO_ADDR
// respawning_time_max = [ 0 0$0 , 10 10$00 , 2 2$00 ] [ def_people_respawning + 1 ] ;
1164: LD_ADDR_EXP 24
1168: PUSH
1169: LD_INT 0
1171: PUSH
1172: LD_INT 21000
1174: PUSH
1175: LD_INT 4200
1177: PUSH
1178: EMPTY
1179: LIST
1180: LIST
1181: LIST
1182: PUSH
1183: LD_EXP 12
1187: PUSH
1188: LD_INT 1
1190: PLUS
1191: ARRAY
1192: ST_TO_ADDR
// morale_decreasing_time = [ - 1 , 0 0$10 , 0 0$20 , 0 0$40 , 0 0$0 ] [ def_morale_flags + 1 ] ;
1193: LD_ADDR_EXP 21
1197: PUSH
1198: LD_INT 1
1200: NEG
1201: PUSH
1202: LD_INT 350
1204: PUSH
1205: LD_INT 700
1207: PUSH
1208: LD_INT 1400
1210: PUSH
1211: LD_INT 0
1213: PUSH
1214: EMPTY
1215: LIST
1216: LIST
1217: LIST
1218: LIST
1219: LIST
1220: PUSH
1221: LD_EXP 9
1225: PUSH
1226: LD_INT 1
1228: PLUS
1229: ARRAY
1230: ST_TO_ADDR
// battle_flags_id = [ ] ;
1231: LD_ADDR_EXP 48
1235: PUSH
1236: EMPTY
1237: ST_TO_ADDR
// if def_builduptime > 0 then
1238: LD_EXP 31
1242: PUSH
1243: LD_INT 0
1245: GREATER
1246: IFFALSE 1310
// extra_oil_deposits_locations := [ [ 168 , 68 ] , [ 52 , 5 ] , [ 36 , 68 ] , [ 73 , 114 ] , [ 232 , 192 ] ] ;
1248: LD_ADDR_EXP 47
1252: PUSH
1253: LD_INT 168
1255: PUSH
1256: LD_INT 68
1258: PUSH
1259: EMPTY
1260: LIST
1261: LIST
1262: PUSH
1263: LD_INT 52
1265: PUSH
1266: LD_INT 5
1268: PUSH
1269: EMPTY
1270: LIST
1271: LIST
1272: PUSH
1273: LD_INT 36
1275: PUSH
1276: LD_INT 68
1278: PUSH
1279: EMPTY
1280: LIST
1281: LIST
1282: PUSH
1283: LD_INT 73
1285: PUSH
1286: LD_INT 114
1288: PUSH
1289: EMPTY
1290: LIST
1291: LIST
1292: PUSH
1293: LD_INT 232
1295: PUSH
1296: LD_INT 192
1298: PUSH
1299: EMPTY
1300: LIST
1301: LIST
1302: PUSH
1303: EMPTY
1304: LIST
1305: LIST
1306: LIST
1307: LIST
1308: LIST
1309: ST_TO_ADDR
// depot_def := [ [ 181 , 74 , 4 ] , [ 61 , 3 , 2 ] , [ 27 , 47 , 1 ] , [ 92 , 125 , 0 ] , [ 248 , 192 , 5 ] ] ;
1310: LD_ADDR_EXP 44
1314: PUSH
1315: LD_INT 181
1317: PUSH
1318: LD_INT 74
1320: PUSH
1321: LD_INT 4
1323: PUSH
1324: EMPTY
1325: LIST
1326: LIST
1327: LIST
1328: PUSH
1329: LD_INT 61
1331: PUSH
1332: LD_INT 3
1334: PUSH
1335: LD_INT 2
1337: PUSH
1338: EMPTY
1339: LIST
1340: LIST
1341: LIST
1342: PUSH
1343: LD_INT 27
1345: PUSH
1346: LD_INT 47
1348: PUSH
1349: LD_INT 1
1351: PUSH
1352: EMPTY
1353: LIST
1354: LIST
1355: LIST
1356: PUSH
1357: LD_INT 92
1359: PUSH
1360: LD_INT 125
1362: PUSH
1363: LD_INT 0
1365: PUSH
1366: EMPTY
1367: LIST
1368: LIST
1369: LIST
1370: PUSH
1371: LD_INT 248
1373: PUSH
1374: LD_INT 192
1376: PUSH
1377: LD_INT 5
1379: PUSH
1380: EMPTY
1381: LIST
1382: LIST
1383: LIST
1384: PUSH
1385: EMPTY
1386: LIST
1387: LIST
1388: LIST
1389: LIST
1390: LIST
1391: ST_TO_ADDR
// start_def := [ [ 171 , 61 ] , [ 63 , 15 ] , [ 41 , 58 ] , [ 83 , 114 ] , [ 239 , 187 ] ] ;
1392: LD_ADDR_EXP 46
1396: PUSH
1397: LD_INT 171
1399: PUSH
1400: LD_INT 61
1402: PUSH
1403: EMPTY
1404: LIST
1405: LIST
1406: PUSH
1407: LD_INT 63
1409: PUSH
1410: LD_INT 15
1412: PUSH
1413: EMPTY
1414: LIST
1415: LIST
1416: PUSH
1417: LD_INT 41
1419: PUSH
1420: LD_INT 58
1422: PUSH
1423: EMPTY
1424: LIST
1425: LIST
1426: PUSH
1427: LD_INT 83
1429: PUSH
1430: LD_INT 114
1432: PUSH
1433: EMPTY
1434: LIST
1435: LIST
1436: PUSH
1437: LD_INT 239
1439: PUSH
1440: LD_INT 187
1442: PUSH
1443: EMPTY
1444: LIST
1445: LIST
1446: PUSH
1447: EMPTY
1448: LIST
1449: LIST
1450: LIST
1451: LIST
1452: LIST
1453: ST_TO_ADDR
// breastworks_def := [ [ [ 158 , 77 , 1 ] , [ 156 , 59 , 1 ] ] , [ [ 60 , 22 , 3 ] , [ 73 , 23 , 3 ] ] , [ [ 49 , 54 , 4 ] , [ 62 , 71 , 4 ] ] , [ [ 89 , 106 , 4 ] , [ 97 , 115 , 4 ] ] , [ [ 210 , 192 , 1 ] , [ 213 , 184 , 1 ] ] ] ;
1454: LD_ADDR_EXP 45
1458: PUSH
1459: LD_INT 158
1461: PUSH
1462: LD_INT 77
1464: PUSH
1465: LD_INT 1
1467: PUSH
1468: EMPTY
1469: LIST
1470: LIST
1471: LIST
1472: PUSH
1473: LD_INT 156
1475: PUSH
1476: LD_INT 59
1478: PUSH
1479: LD_INT 1
1481: PUSH
1482: EMPTY
1483: LIST
1484: LIST
1485: LIST
1486: PUSH
1487: EMPTY
1488: LIST
1489: LIST
1490: PUSH
1491: LD_INT 60
1493: PUSH
1494: LD_INT 22
1496: PUSH
1497: LD_INT 3
1499: PUSH
1500: EMPTY
1501: LIST
1502: LIST
1503: LIST
1504: PUSH
1505: LD_INT 73
1507: PUSH
1508: LD_INT 23
1510: PUSH
1511: LD_INT 3
1513: PUSH
1514: EMPTY
1515: LIST
1516: LIST
1517: LIST
1518: PUSH
1519: EMPTY
1520: LIST
1521: LIST
1522: PUSH
1523: LD_INT 49
1525: PUSH
1526: LD_INT 54
1528: PUSH
1529: LD_INT 4
1531: PUSH
1532: EMPTY
1533: LIST
1534: LIST
1535: LIST
1536: PUSH
1537: LD_INT 62
1539: PUSH
1540: LD_INT 71
1542: PUSH
1543: LD_INT 4
1545: PUSH
1546: EMPTY
1547: LIST
1548: LIST
1549: LIST
1550: PUSH
1551: EMPTY
1552: LIST
1553: LIST
1554: PUSH
1555: LD_INT 89
1557: PUSH
1558: LD_INT 106
1560: PUSH
1561: LD_INT 4
1563: PUSH
1564: EMPTY
1565: LIST
1566: LIST
1567: LIST
1568: PUSH
1569: LD_INT 97
1571: PUSH
1572: LD_INT 115
1574: PUSH
1575: LD_INT 4
1577: PUSH
1578: EMPTY
1579: LIST
1580: LIST
1581: LIST
1582: PUSH
1583: EMPTY
1584: LIST
1585: LIST
1586: PUSH
1587: LD_INT 210
1589: PUSH
1590: LD_INT 192
1592: PUSH
1593: LD_INT 1
1595: PUSH
1596: EMPTY
1597: LIST
1598: LIST
1599: LIST
1600: PUSH
1601: LD_INT 213
1603: PUSH
1604: LD_INT 184
1606: PUSH
1607: LD_INT 1
1609: PUSH
1610: EMPTY
1611: LIST
1612: LIST
1613: LIST
1614: PUSH
1615: EMPTY
1616: LIST
1617: LIST
1618: PUSH
1619: EMPTY
1620: LIST
1621: LIST
1622: LIST
1623: LIST
1624: LIST
1625: ST_TO_ADDR
// end ;
1626: LD_VAR 0 1
1630: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
1631: LD_INT 0
1633: PPUSH
1634: PPUSH
1635: PPUSH
// Team_Game := 0 ;
1636: LD_ADDR_EXP 43
1640: PUSH
1641: LD_INT 0
1643: ST_TO_ADDR
// for i = 1 to 8 do
1644: LD_ADDR_VAR 0 2
1648: PUSH
1649: DOUBLE
1650: LD_INT 1
1652: DEC
1653: ST_TO_ADDR
1654: LD_INT 8
1656: PUSH
1657: FOR_TO
1658: IFFALSE 1684
// Team_Game := Team_Game + Side_Teams [ i ] ;
1660: LD_ADDR_EXP 43
1664: PUSH
1665: LD_EXP 43
1669: PUSH
1670: LD_EXP 36
1674: PUSH
1675: LD_VAR 0 2
1679: ARRAY
1680: PLUS
1681: ST_TO_ADDR
1682: GO 1657
1684: POP
1685: POP
// if not Team_Game then
1686: LD_EXP 43
1690: NOT
1691: IFFALSE 1703
// Team_Game := false else
1693: LD_ADDR_EXP 43
1697: PUSH
1698: LD_INT 0
1700: ST_TO_ADDR
1701: GO 1711
// Team_Game := true ;
1703: LD_ADDR_EXP 43
1707: PUSH
1708: LD_INT 1
1710: ST_TO_ADDR
// if not Team_Game then
1711: LD_EXP 43
1715: NOT
1716: IFFALSE 1814
// begin for i = 1 to 8 do
1718: LD_ADDR_VAR 0 2
1722: PUSH
1723: DOUBLE
1724: LD_INT 1
1726: DEC
1727: ST_TO_ADDR
1728: LD_INT 8
1730: PUSH
1731: FOR_TO
1732: IFFALSE 1810
// for j = 1 to 8 do
1734: LD_ADDR_VAR 0 3
1738: PUSH
1739: DOUBLE
1740: LD_INT 1
1742: DEC
1743: ST_TO_ADDR
1744: LD_INT 8
1746: PUSH
1747: FOR_TO
1748: IFFALSE 1806
// if i <> j then
1750: LD_VAR 0 2
1754: PUSH
1755: LD_VAR 0 3
1759: NONEQUAL
1760: IFFALSE 1784
// SetAttitude ( i , j , att_neutral , true ) else
1762: LD_VAR 0 2
1766: PPUSH
1767: LD_VAR 0 3
1771: PPUSH
1772: LD_INT 0
1774: PPUSH
1775: LD_INT 1
1777: PPUSH
1778: CALL_OW 80
1782: GO 1804
// SetAttitude ( i , j , att_friend , true ) ;
1784: LD_VAR 0 2
1788: PPUSH
1789: LD_VAR 0 3
1793: PPUSH
1794: LD_INT 1
1796: PPUSH
1797: LD_INT 1
1799: PPUSH
1800: CALL_OW 80
1804: GO 1747
1806: POP
1807: POP
1808: GO 1731
1810: POP
1811: POP
// end else
1812: GO 1989
// begin if def_shared_vision then
1814: LD_EXP 8
1818: IFFALSE 1883
// begin for i in Teams do
1820: LD_ADDR_VAR 0 2
1824: PUSH
1825: LD_EXP 37
1829: PUSH
1830: FOR_IN
1831: IFFALSE 1881
// for j = 2 to i do
1833: LD_ADDR_VAR 0 3
1837: PUSH
1838: DOUBLE
1839: LD_INT 2
1841: DEC
1842: ST_TO_ADDR
1843: LD_VAR 0 2
1847: PUSH
1848: FOR_TO
1849: IFFALSE 1877
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
1851: LD_VAR 0 2
1855: PUSH
1856: LD_VAR 0 3
1860: ARRAY
1861: PPUSH
1862: LD_VAR 0 2
1866: PUSH
1867: LD_INT 1
1869: ARRAY
1870: PPUSH
1871: CALL_OW 343
1875: GO 1848
1877: POP
1878: POP
1879: GO 1830
1881: POP
1882: POP
// end ; for i = 1 to 8 do
1883: LD_ADDR_VAR 0 2
1887: PUSH
1888: DOUBLE
1889: LD_INT 1
1891: DEC
1892: ST_TO_ADDR
1893: LD_INT 8
1895: PUSH
1896: FOR_TO
1897: IFFALSE 1987
// for j = 1 to 8 do
1899: LD_ADDR_VAR 0 3
1903: PUSH
1904: DOUBLE
1905: LD_INT 1
1907: DEC
1908: ST_TO_ADDR
1909: LD_INT 8
1911: PUSH
1912: FOR_TO
1913: IFFALSE 1983
// if Side_Teams [ i ] = Side_Teams [ j ] then
1915: LD_EXP 36
1919: PUSH
1920: LD_VAR 0 2
1924: ARRAY
1925: PUSH
1926: LD_EXP 36
1930: PUSH
1931: LD_VAR 0 3
1935: ARRAY
1936: EQUAL
1937: IFFALSE 1961
// SetAttitude ( i , j , att_friend , true ) else
1939: LD_VAR 0 2
1943: PPUSH
1944: LD_VAR 0 3
1948: PPUSH
1949: LD_INT 1
1951: PPUSH
1952: LD_INT 1
1954: PPUSH
1955: CALL_OW 80
1959: GO 1981
// SetAttitude ( i , j , att_enemy , true ) ;
1961: LD_VAR 0 2
1965: PPUSH
1966: LD_VAR 0 3
1970: PPUSH
1971: LD_INT 2
1973: PPUSH
1974: LD_INT 1
1976: PPUSH
1977: CALL_OW 80
1981: GO 1912
1983: POP
1984: POP
1985: GO 1896
1987: POP
1988: POP
// end ; end ;
1989: LD_VAR 0 1
1993: RET
// function prepare_people ( side , count , cl , x , y , r , var commander ) ; var i , j , un ; begin
1994: LD_INT 0
1996: PPUSH
1997: PPUSH
1998: PPUSH
1999: PPUSH
// result := [ ] ;
2000: LD_ADDR_VAR 0 8
2004: PUSH
2005: EMPTY
2006: ST_TO_ADDR
// for i := 1 to count do
2007: LD_ADDR_VAR 0 9
2011: PUSH
2012: DOUBLE
2013: LD_INT 1
2015: DEC
2016: ST_TO_ADDR
2017: LD_VAR 0 2
2021: PUSH
2022: FOR_TO
2023: IFFALSE 2417
// begin uc_direction := Rand ( 0 , 5 ) ;
2025: LD_ADDR_OWVAR 24
2029: PUSH
2030: LD_INT 0
2032: PPUSH
2033: LD_INT 5
2035: PPUSH
2036: CALL_OW 12
2040: ST_TO_ADDR
// if commander then
2041: LD_FROM_VAR 0 7
2045: IFFALSE 2154
// begin hc_name := mp_sides_players_names [ side ] ;
2047: LD_ADDR_OWVAR 26
2051: PUSH
2052: LD_OWVAR 19
2056: PUSH
2057: LD_VAR 0 1
2061: ARRAY
2062: ST_TO_ADDR
// PrepareHuman ( Rand ( 1 , 2 ) , cl , initial_level + 2 ) ;
2063: LD_INT 1
2065: PPUSH
2066: LD_INT 2
2068: PPUSH
2069: CALL_OW 12
2073: PPUSH
2074: LD_VAR 0 3
2078: PPUSH
2079: LD_EXP 17
2083: PUSH
2084: LD_INT 2
2086: PLUS
2087: PPUSH
2088: CALL_OW 380
// hc_importance := 105 ;
2092: LD_ADDR_OWVAR 32
2096: PUSH
2097: LD_INT 105
2099: ST_TO_ADDR
// commander := false ;
2100: LD_VAR 0 7
2104: PUSH
2105: LD_INT 0
2107: ST_TO_ADDR
// if Multiplayer then
2108: LD_OWVAR 4
2112: IFFALSE 2152
// begin hc_gallery := MULTIAVATARS ;
2114: LD_ADDR_OWVAR 33
2118: PUSH
2119: LD_STRING MULTIAVATARS
2121: ST_TO_ADDR
// hc_face_number := Multiplayer_GetPlayerSideNum ( Side ) ;
2122: LD_ADDR_OWVAR 34
2126: PUSH
2127: LD_VAR 0 1
2131: PPUSH
2132: CALL_OW 525
2136: ST_TO_ADDR
// hc_sex := Multiplayer_GetPlayerSex ( Side ) ;
2137: LD_ADDR_OWVAR 27
2141: PUSH
2142: LD_VAR 0 1
2146: PPUSH
2147: CALL_OW 526
2151: ST_TO_ADDR
// end ; end else
2152: GO 2217
// begin hc_name :=  ;
2154: LD_ADDR_OWVAR 26
2158: PUSH
2159: LD_STRING 
2161: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , initial_level ) ;
2162: LD_INT 1
2164: PPUSH
2165: LD_INT 2
2167: PPUSH
2168: CALL_OW 12
2172: PPUSH
2173: LD_VAR 0 3
2177: PPUSH
2178: LD_EXP 17
2182: PPUSH
2183: CALL_OW 380
// hc_importance := 0 ;
2187: LD_ADDR_OWVAR 32
2191: PUSH
2192: LD_INT 0
2194: ST_TO_ADDR
// if Multiplayer then
2195: LD_OWVAR 4
2199: IFFALSE 2217
// begin hc_gallery :=  ;
2201: LD_ADDR_OWVAR 33
2205: PUSH
2206: LD_STRING 
2208: ST_TO_ADDR
// hc_face_number := 0 ;
2209: LD_ADDR_OWVAR 34
2213: PUSH
2214: LD_INT 0
2216: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
2217: LD_ADDR_VAR 0 11
2221: PUSH
2222: CALL_OW 44
2226: ST_TO_ADDR
// if global_defined then
2227: LD_LOC 2
2231: IFFALSE 2369
// begin j := i ;
2233: LD_ADDR_VAR 0 10
2237: PUSH
2238: LD_VAR 0 9
2242: ST_TO_ADDR
// if cl = class_soldier then
2243: LD_VAR 0 3
2247: PUSH
2248: LD_INT 1
2250: EQUAL
2251: IFFALSE 2269
// j := i + soldiers_created ;
2253: LD_ADDR_VAR 0 10
2257: PUSH
2258: LD_VAR 0 9
2262: PUSH
2263: LD_LOC 3
2267: PLUS
2268: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2269: LD_LOC 1
2273: PUSH
2274: LD_VAR 0 3
2278: ARRAY
2279: PUSH
2280: LD_VAR 0 10
2284: ARRAY
2285: PPUSH
2286: LD_VAR 0 11
2290: PPUSH
2291: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2295: LD_VAR 0 11
2299: PPUSH
2300: LD_INT 2
2302: PPUSH
2303: LD_LOC 1
2307: PUSH
2308: LD_VAR 0 3
2312: ARRAY
2313: PUSH
2314: LD_VAR 0 10
2318: ARRAY
2319: PPUSH
2320: LD_INT 2
2322: PPUSH
2323: CALL_OW 260
2327: PPUSH
2328: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2332: LD_VAR 0 11
2336: PPUSH
2337: LD_INT 1
2339: PPUSH
2340: LD_LOC 1
2344: PUSH
2345: LD_VAR 0 3
2349: ARRAY
2350: PUSH
2351: LD_VAR 0 10
2355: ARRAY
2356: PPUSH
2357: LD_INT 1
2359: PPUSH
2360: CALL_OW 260
2364: PPUSH
2365: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2369: LD_VAR 0 11
2373: PPUSH
2374: LD_VAR 0 4
2378: PPUSH
2379: LD_VAR 0 5
2383: PPUSH
2384: LD_VAR 0 6
2388: PPUSH
2389: LD_INT 0
2391: PPUSH
2392: CALL_OW 50
// result := result ^ [ un ] ;
2396: LD_ADDR_VAR 0 8
2400: PUSH
2401: LD_VAR 0 8
2405: PUSH
2406: LD_VAR 0 11
2410: PUSH
2411: EMPTY
2412: LIST
2413: ADD
2414: ST_TO_ADDR
// end ;
2415: GO 2022
2417: POP
2418: POP
// if not global_defined then
2419: LD_LOC 2
2423: NOT
2424: IFFALSE 2486
// if cl = class_soldier and global_units then
2426: LD_VAR 0 3
2430: PUSH
2431: LD_INT 1
2433: EQUAL
2434: PUSH
2435: LD_LOC 1
2439: AND
2440: IFFALSE 2467
// global_units := [ global_units [ 1 ] ^ result ] else
2442: LD_ADDR_LOC 1
2446: PUSH
2447: LD_LOC 1
2451: PUSH
2452: LD_INT 1
2454: ARRAY
2455: PUSH
2456: LD_VAR 0 8
2460: ADD
2461: PUSH
2462: EMPTY
2463: LIST
2464: ST_TO_ADDR
2465: GO 2486
// global_units := global_units ^ [ result ] end ;
2467: LD_ADDR_LOC 1
2471: PUSH
2472: LD_LOC 1
2476: PUSH
2477: LD_VAR 0 8
2481: PUSH
2482: EMPTY
2483: LIST
2484: ADD
2485: ST_TO_ADDR
2486: LD_VAR 0 8
2490: RET
// function prepare_side ( side ) ; var pos , x , y , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
2491: LD_INT 0
2493: PPUSH
2494: PPUSH
2495: PPUSH
2496: PPUSH
2497: PPUSH
2498: PPUSH
2499: PPUSH
2500: PPUSH
2501: PPUSH
2502: PPUSH
2503: PPUSH
2504: PPUSH
2505: PPUSH
// Side_IsSpec := Replace ( Side_IsSpec , Side , Multiplayer_GetPlayerIsSpec ( Side ) ) ;
2506: LD_ADDR_EXP 38
2510: PUSH
2511: LD_EXP 38
2515: PPUSH
2516: LD_VAR 0 1
2520: PPUSH
2521: LD_VAR 0 1
2525: PPUSH
2526: CALL_OW 530
2530: PPUSH
2531: CALL_OW 1
2535: ST_TO_ADDR
// if Side_IsSpec [ Side ] = true then
2536: LD_EXP 38
2540: PUSH
2541: LD_VAR 0 1
2545: ARRAY
2546: PUSH
2547: LD_INT 1
2549: EQUAL
2550: IFFALSE 2554
// begin exit ;
2552: GO 3791
// end ; pos := Side_Positions [ side ] ;
2554: LD_ADDR_VAR 0 3
2558: PUSH
2559: LD_EXP 39
2563: PUSH
2564: LD_VAR 0 1
2568: ARRAY
2569: ST_TO_ADDR
// if not def_siberite_bomb then
2570: LD_EXP 13
2574: NOT
2575: IFFALSE 2612
// for i = 1 to 8 do
2577: LD_ADDR_VAR 0 6
2581: PUSH
2582: DOUBLE
2583: LD_INT 1
2585: DEC
2586: ST_TO_ADDR
2587: LD_INT 8
2589: PUSH
2590: FOR_TO
2591: IFFALSE 2610
// SetTech ( tech_SibFiss , i , state_disabled ) ;
2593: LD_INT 25
2595: PPUSH
2596: LD_VAR 0 6
2600: PPUSH
2601: LD_INT 0
2603: PPUSH
2604: CALL_OW 322
2608: GO 2590
2610: POP
2611: POP
// uc_nation := Side_Nations [ side ] ;
2612: LD_ADDR_OWVAR 21
2616: PUSH
2617: LD_EXP 40
2621: PUSH
2622: LD_VAR 0 1
2626: ARRAY
2627: ST_TO_ADDR
// uc_side := side ;
2628: LD_ADDR_OWVAR 20
2632: PUSH
2633: LD_VAR 0 1
2637: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
2638: LD_ADDR_VAR 0 4
2642: PUSH
2643: LD_EXP 44
2647: PUSH
2648: LD_VAR 0 3
2652: ARRAY
2653: PUSH
2654: LD_INT 1
2656: ARRAY
2657: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
2658: LD_ADDR_VAR 0 5
2662: PUSH
2663: LD_EXP 44
2667: PUSH
2668: LD_VAR 0 3
2672: ARRAY
2673: PUSH
2674: LD_INT 2
2676: ARRAY
2677: ST_TO_ADDR
// if is_depot then
2678: LD_EXP 14
2682: IFFALSE 2807
// begin bc_type = b_depot ;
2684: LD_ADDR_OWVAR 42
2688: PUSH
2689: LD_INT 0
2691: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , Depot_Def [ pos ] [ 3 ] ) ;
2692: LD_ADDR_VAR 0 10
2696: PUSH
2697: LD_VAR 0 4
2701: PPUSH
2702: LD_VAR 0 5
2706: PPUSH
2707: LD_EXP 44
2711: PUSH
2712: LD_VAR 0 3
2716: ARRAY
2717: PUSH
2718: LD_INT 3
2720: ARRAY
2721: PPUSH
2722: CALL_OW 47
2726: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
2727: LD_VAR 0 10
2731: PPUSH
2732: CALL_OW 274
2736: PPUSH
2737: LD_INT 1
2739: PPUSH
2740: LD_EXP 19
2744: PUSH
2745: LD_INT 1
2747: ARRAY
2748: PPUSH
2749: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
2753: LD_VAR 0 10
2757: PPUSH
2758: CALL_OW 274
2762: PPUSH
2763: LD_INT 2
2765: PPUSH
2766: LD_EXP 19
2770: PUSH
2771: LD_INT 2
2773: ARRAY
2774: PPUSH
2775: CALL_OW 277
// SetResourceType ( GetBase ( result ) , mat_siberit , starting_resources [ mat_siberit ] ) ;
2779: LD_VAR 0 2
2783: PPUSH
2784: CALL_OW 274
2788: PPUSH
2789: LD_INT 3
2791: PPUSH
2792: LD_EXP 19
2796: PUSH
2797: LD_INT 3
2799: ARRAY
2800: PPUSH
2801: CALL_OW 277
// end else
2805: GO 2951
// begin for i := 1 to 3 do
2807: LD_ADDR_VAR 0 6
2811: PUSH
2812: DOUBLE
2813: LD_INT 1
2815: DEC
2816: ST_TO_ADDR
2817: LD_INT 3
2819: PUSH
2820: FOR_TO
2821: IFFALSE 2949
// begin r := starting_resources [ i ] ;
2823: LD_ADDR_VAR 0 7
2827: PUSH
2828: LD_EXP 19
2832: PUSH
2833: LD_VAR 0 6
2837: ARRAY
2838: ST_TO_ADDR
// while r >= 10 do
2839: LD_VAR 0 7
2843: PUSH
2844: LD_INT 10
2846: GREATEREQUAL
2847: IFFALSE 2947
// if r > 50 then
2849: LD_VAR 0 7
2853: PUSH
2854: LD_INT 50
2856: GREATER
2857: IFFALSE 2903
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
2859: LD_VAR 0 6
2863: PPUSH
2864: LD_INT 5
2866: PPUSH
2867: LD_VAR 0 4
2871: PPUSH
2872: LD_VAR 0 5
2876: PPUSH
2877: LD_INT 4
2879: PPUSH
2880: LD_INT 0
2882: PPUSH
2883: CALL_OW 60
// r := r - 50 ;
2887: LD_ADDR_VAR 0 7
2891: PUSH
2892: LD_VAR 0 7
2896: PUSH
2897: LD_INT 50
2899: MINUS
2900: ST_TO_ADDR
// end else
2901: GO 2945
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
2903: LD_VAR 0 6
2907: PPUSH
2908: LD_VAR 0 7
2912: PUSH
2913: LD_INT 10
2915: DIV
2916: PPUSH
2917: LD_VAR 0 4
2921: PPUSH
2922: LD_VAR 0 5
2926: PPUSH
2927: LD_INT 4
2929: PPUSH
2930: LD_INT 0
2932: PPUSH
2933: CALL_OW 60
// r := 0 ;
2937: LD_ADDR_VAR 0 7
2941: PUSH
2942: LD_INT 0
2944: ST_TO_ADDR
// end ;
2945: GO 2839
// end ;
2947: GO 2820
2949: POP
2950: POP
// end ; x := start_def [ pos ] [ 1 ] ;
2951: LD_ADDR_VAR 0 4
2955: PUSH
2956: LD_EXP 46
2960: PUSH
2961: LD_VAR 0 3
2965: ARRAY
2966: PUSH
2967: LD_INT 1
2969: ARRAY
2970: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
2971: LD_ADDR_VAR 0 5
2975: PUSH
2976: LD_EXP 46
2980: PUSH
2981: LD_VAR 0 3
2985: ARRAY
2986: PUSH
2987: LD_INT 2
2989: ARRAY
2990: ST_TO_ADDR
// for r in starting_crates do
2991: LD_ADDR_VAR 0 7
2995: PUSH
2996: LD_EXP 18
3000: PUSH
3001: FOR_IN
3002: IFFALSE 3034
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
3004: LD_INT 1
3006: PPUSH
3007: LD_INT 5
3009: PPUSH
3010: LD_VAR 0 4
3014: PPUSH
3015: LD_VAR 0 5
3019: PPUSH
3020: LD_VAR 0 7
3024: PPUSH
3025: LD_INT 0
3027: PPUSH
3028: CALL_OW 60
3032: GO 3001
3034: POP
3035: POP
// if def_morale_flags then
3036: LD_EXP 9
3040: IFFALSE 3119
// battle_flags_id := battle_flags_id ^ SetBattleFlag ( side , x , y , [ [ bfo_defend_bonus_human , 100 ] , [ bfo_defend_bonus_vehicle , 50 ] , [ bfo_defend_bonus_building , 20 ] , [ bfo_height , 100 ] ] ) ;
3042: LD_ADDR_EXP 48
3046: PUSH
3047: LD_EXP 48
3051: PUSH
3052: LD_VAR 0 1
3056: PPUSH
3057: LD_VAR 0 4
3061: PPUSH
3062: LD_VAR 0 5
3066: PPUSH
3067: LD_INT 1
3069: PUSH
3070: LD_INT 100
3072: PUSH
3073: EMPTY
3074: LIST
3075: LIST
3076: PUSH
3077: LD_INT 2
3079: PUSH
3080: LD_INT 50
3082: PUSH
3083: EMPTY
3084: LIST
3085: LIST
3086: PUSH
3087: LD_INT 3
3089: PUSH
3090: LD_INT 20
3092: PUSH
3093: EMPTY
3094: LIST
3095: LIST
3096: PUSH
3097: LD_INT 20
3099: PUSH
3100: LD_INT 100
3102: PUSH
3103: EMPTY
3104: LIST
3105: LIST
3106: PUSH
3107: EMPTY
3108: LIST
3109: LIST
3110: LIST
3111: LIST
3112: PPUSH
3113: CALL_OW 418
3117: ADD
3118: ST_TO_ADDR
// neng := number_of_people ;
3119: LD_ADDR_VAR 0 11
3123: PUSH
3124: LD_EXP 16
3128: ST_TO_ADDR
// nsol := number_of_breastworks ;
3129: LD_ADDR_VAR 0 14
3133: PUSH
3134: LD_EXP 15
3138: ST_TO_ADDR
// if nsol < neng div 4 then
3139: LD_VAR 0 14
3143: PUSH
3144: LD_VAR 0 11
3148: PUSH
3149: LD_INT 4
3151: DIV
3152: LESS
3153: IFFALSE 3169
// nsol := neng div 4 ;
3155: LD_ADDR_VAR 0 14
3159: PUSH
3160: LD_VAR 0 11
3164: PUSH
3165: LD_INT 4
3167: DIV
3168: ST_TO_ADDR
// neng := neng - nsol ;
3169: LD_ADDR_VAR 0 11
3173: PUSH
3174: LD_VAR 0 11
3178: PUSH
3179: LD_VAR 0 14
3183: MINUS
3184: ST_TO_ADDR
// nsci := neng div 3 ;
3185: LD_ADDR_VAR 0 12
3189: PUSH
3190: LD_VAR 0 11
3194: PUSH
3195: LD_INT 3
3197: DIV
3198: ST_TO_ADDR
// if nsci < 1 then
3199: LD_VAR 0 12
3203: PUSH
3204: LD_INT 1
3206: LESS
3207: IFFALSE 3217
// nsci := 1 ;
3209: LD_ADDR_VAR 0 12
3213: PUSH
3214: LD_INT 1
3216: ST_TO_ADDR
// neng := neng - nsci ;
3217: LD_ADDR_VAR 0 11
3221: PUSH
3222: LD_VAR 0 11
3226: PUSH
3227: LD_VAR 0 12
3231: MINUS
3232: ST_TO_ADDR
// nmech := neng div 2 ;
3233: LD_ADDR_VAR 0 13
3237: PUSH
3238: LD_VAR 0 11
3242: PUSH
3243: LD_INT 2
3245: DIV
3246: ST_TO_ADDR
// neng := neng - nmech ;
3247: LD_ADDR_VAR 0 11
3251: PUSH
3252: LD_VAR 0 11
3256: PUSH
3257: LD_VAR 0 13
3261: MINUS
3262: ST_TO_ADDR
// if neng < 1 then
3263: LD_VAR 0 11
3267: PUSH
3268: LD_INT 1
3270: LESS
3271: IFFALSE 3281
// neng := 1 ;
3273: LD_ADDR_VAR 0 11
3277: PUSH
3278: LD_INT 1
3280: ST_TO_ADDR
// commander := true ;
3281: LD_ADDR_EXP 50
3285: PUSH
3286: LD_INT 1
3288: ST_TO_ADDR
// soldiers_created := 0 ;
3289: LD_ADDR_LOC 3
3293: PUSH
3294: LD_INT 0
3296: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
3297: LD_ADDR_VAR 0 6
3301: PUSH
3302: DOUBLE
3303: LD_INT 1
3305: DEC
3306: ST_TO_ADDR
3307: LD_EXP 15
3311: PUSH
3312: FOR_TO
3313: IFFALSE 3567
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
3315: LD_ADDR_VAR 0 4
3319: PUSH
3320: LD_EXP 45
3324: PUSH
3325: LD_VAR 0 3
3329: ARRAY
3330: PUSH
3331: LD_VAR 0 6
3335: ARRAY
3336: PUSH
3337: LD_INT 1
3339: ARRAY
3340: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
3341: LD_ADDR_VAR 0 5
3345: PUSH
3346: LD_EXP 45
3350: PUSH
3351: LD_VAR 0 3
3355: ARRAY
3356: PUSH
3357: LD_VAR 0 6
3361: ARRAY
3362: PUSH
3363: LD_INT 2
3365: ARRAY
3366: ST_TO_ADDR
// bc_type := b_breastwork ;
3367: LD_ADDR_OWVAR 42
3371: PUSH
3372: LD_INT 31
3374: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , breastworks_def [ pos ] [ i ] [ 3 ] ) ;
3375: LD_ADDR_VAR 0 9
3379: PUSH
3380: LD_VAR 0 4
3384: PPUSH
3385: LD_VAR 0 5
3389: PPUSH
3390: LD_EXP 45
3394: PUSH
3395: LD_VAR 0 3
3399: ARRAY
3400: PUSH
3401: LD_VAR 0 6
3405: ARRAY
3406: PUSH
3407: LD_INT 3
3409: ARRAY
3410: PPUSH
3411: CALL_OW 47
3415: ST_TO_ADDR
// x := ShiftX ( x , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
3416: LD_ADDR_VAR 0 4
3420: PUSH
3421: LD_VAR 0 4
3425: PPUSH
3426: LD_EXP 45
3430: PUSH
3431: LD_VAR 0 3
3435: ARRAY
3436: PUSH
3437: LD_VAR 0 6
3441: ARRAY
3442: PUSH
3443: LD_INT 3
3445: ARRAY
3446: PPUSH
3447: LD_INT 2
3449: PPUSH
3450: CALL_OW 272
3454: ST_TO_ADDR
// y := ShiftY ( y , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
3455: LD_ADDR_VAR 0 5
3459: PUSH
3460: LD_VAR 0 5
3464: PPUSH
3465: LD_EXP 45
3469: PUSH
3470: LD_VAR 0 3
3474: ARRAY
3475: PUSH
3476: LD_VAR 0 6
3480: ARRAY
3481: PUSH
3482: LD_INT 3
3484: ARRAY
3485: PPUSH
3486: LD_INT 2
3488: PPUSH
3489: CALL_OW 273
3493: ST_TO_ADDR
// sol := prepare_people ( side , 1 , class_soldier , x , y , 1 , commander ) [ 1 ] ;
3494: LD_ADDR_VAR 0 8
3498: PUSH
3499: LD_VAR 0 1
3503: PPUSH
3504: LD_INT 1
3506: PPUSH
3507: LD_INT 1
3509: PPUSH
3510: LD_VAR 0 4
3514: PPUSH
3515: LD_VAR 0 5
3519: PPUSH
3520: LD_INT 1
3522: PPUSH
3523: LD_ADDR_EXP 50
3527: PPUSH
3528: CALL 1994 0 7
3532: PUSH
3533: LD_INT 1
3535: ARRAY
3536: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
3537: LD_ADDR_LOC 3
3541: PUSH
3542: LD_LOC 3
3546: PUSH
3547: LD_INT 1
3549: PLUS
3550: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
3551: LD_VAR 0 8
3555: PPUSH
3556: LD_VAR 0 9
3560: PPUSH
3561: CALL_OW 120
// end ;
3565: GO 3312
3567: POP
3568: POP
// x := start_def [ pos ] [ 1 ] ;
3569: LD_ADDR_VAR 0 4
3573: PUSH
3574: LD_EXP 46
3578: PUSH
3579: LD_VAR 0 3
3583: ARRAY
3584: PUSH
3585: LD_INT 1
3587: ARRAY
3588: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
3589: LD_ADDR_VAR 0 5
3593: PUSH
3594: LD_EXP 46
3598: PUSH
3599: LD_VAR 0 3
3603: ARRAY
3604: PUSH
3605: LD_INT 2
3607: ARRAY
3608: ST_TO_ADDR
// prepare_people ( side , nsol - number_of_breastworks , class_soldier , x , y , 5 , commander ) ;
3609: LD_VAR 0 1
3613: PPUSH
3614: LD_VAR 0 14
3618: PUSH
3619: LD_EXP 15
3623: MINUS
3624: PPUSH
3625: LD_INT 1
3627: PPUSH
3628: LD_VAR 0 4
3632: PPUSH
3633: LD_VAR 0 5
3637: PPUSH
3638: LD_INT 5
3640: PPUSH
3641: LD_ADDR_EXP 50
3645: PPUSH
3646: CALL 1994 0 7
// prepare_people ( side , neng , class_engineer , x , y , 5 , commander ) ;
3650: LD_VAR 0 1
3654: PPUSH
3655: LD_VAR 0 11
3659: PPUSH
3660: LD_INT 2
3662: PPUSH
3663: LD_VAR 0 4
3667: PPUSH
3668: LD_VAR 0 5
3672: PPUSH
3673: LD_INT 5
3675: PPUSH
3676: LD_ADDR_EXP 50
3680: PPUSH
3681: CALL 1994 0 7
// prepare_people ( side , nmech , class_mechanic , x , y , 5 , commander ) ;
3685: LD_VAR 0 1
3689: PPUSH
3690: LD_VAR 0 13
3694: PPUSH
3695: LD_INT 3
3697: PPUSH
3698: LD_VAR 0 4
3702: PPUSH
3703: LD_VAR 0 5
3707: PPUSH
3708: LD_INT 5
3710: PPUSH
3711: LD_ADDR_EXP 50
3715: PPUSH
3716: CALL 1994 0 7
// prepare_people ( side , nsci , class_scientistic , x , y , 5 , commander ) ;
3720: LD_VAR 0 1
3724: PPUSH
3725: LD_VAR 0 12
3729: PPUSH
3730: LD_INT 4
3732: PPUSH
3733: LD_VAR 0 4
3737: PPUSH
3738: LD_VAR 0 5
3742: PPUSH
3743: LD_INT 5
3745: PPUSH
3746: LD_ADDR_EXP 50
3750: PPUSH
3751: CALL 1994 0 7
// if not global_defined then
3755: LD_LOC 2
3759: NOT
3760: IFFALSE 3770
// global_defined := true ;
3762: LD_ADDR_LOC 2
3766: PUSH
3767: LD_INT 1
3769: ST_TO_ADDR
// if def_siberite_detection then
3770: LD_EXP 10
3774: IFFALSE 3791
// SetTech ( tech_SibDet , side , state_researched ) ;
3776: LD_INT 20
3778: PPUSH
3779: LD_VAR 0 1
3783: PPUSH
3784: LD_INT 2
3786: PPUSH
3787: CALL_OW 322
// end ;
3791: LD_VAR 0 2
3795: RET
// function prepare_sides ; var i ; begin
3796: LD_INT 0
3798: PPUSH
3799: PPUSH
// global_units := [ ] ;
3800: LD_ADDR_LOC 1
3804: PUSH
3805: EMPTY
3806: ST_TO_ADDR
// global_defined := false ;
3807: LD_ADDR_LOC 2
3811: PUSH
3812: LD_INT 0
3814: ST_TO_ADDR
// for i := 1 to Side_Positions do
3815: LD_ADDR_VAR 0 2
3819: PUSH
3820: DOUBLE
3821: LD_INT 1
3823: DEC
3824: ST_TO_ADDR
3825: LD_EXP 39
3829: PUSH
3830: FOR_TO
3831: IFFALSE 3856
// if Side_Positions [ i ] then
3833: LD_EXP 39
3837: PUSH
3838: LD_VAR 0 2
3842: ARRAY
3843: IFFALSE 3854
// prepare_side ( i ) ;
3845: LD_VAR 0 2
3849: PPUSH
3850: CALL 2491 0 1
3854: GO 3830
3856: POP
3857: POP
// end ;
3858: LD_VAR 0 1
3862: RET
// function prepare_specfog ; var i , x ; begin
3863: LD_INT 0
3865: PPUSH
3866: PPUSH
3867: PPUSH
// if IAmSpec then
3868: CALL_OW 531
3872: IFFALSE 3878
// TurnFogOff ;
3874: CALL_OW 537
// end ;
3878: LD_VAR 0 1
3882: RET
// starting begin Disable_All_Games ;
3883: CALL 11847 0 0
// mp_selectmsg := true ;
3887: LD_ADDR_OWVAR 13
3891: PUSH
3892: LD_INT 1
3894: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
3895: CALL 55 0 0
// init_map ;
3899: CALL 0 0 0
// set_shared_visions_and_alliances ;
3903: CALL 1631 0 0
// prepare_sides ;
3907: CALL 3796 0 0
// Init_Win_Condition ;
3911: CALL 4697 0 0
// case Game_Type of 2 :
3915: LD_EXP 1
3919: PUSH
3920: LD_INT 2
3922: DOUBLE
3923: EQUAL
3924: IFTRUE 3928
3926: GO 3935
3928: POP
// init_alien_research ; end ;
3929: CALL 6275 0 0
3933: GO 3936
3935: POP
// if Game_type <> 3 then
3936: LD_EXP 1
3940: PUSH
3941: LD_INT 3
3943: NONEQUAL
3944: IFFALSE 3956
// your_side := Player_Side ;
3946: LD_ADDR_OWVAR 2
3950: PUSH
3951: LD_EXP 34
3955: ST_TO_ADDR
// ResetFog ;
3956: CALL_OW 335
// prepare_specfog ;
3960: CALL 3863 0 0
// music_nat := Side_Nations [ your_side ] ;
3964: LD_ADDR_OWVAR 71
3968: PUSH
3969: LD_EXP 40
3973: PUSH
3974: LD_OWVAR 2
3978: ARRAY
3979: ST_TO_ADDR
// if IAMSpec then
3980: CALL_OW 531
3984: IFFALSE 3998
// CenterNowOnXY ( 104 , 69 ) else
3986: LD_INT 104
3988: PPUSH
3989: LD_INT 69
3991: PPUSH
3992: CALL_OW 86
3996: GO 4044
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
3998: LD_EXP 46
4002: PUSH
4003: LD_EXP 39
4007: PUSH
4008: LD_OWVAR 2
4012: ARRAY
4013: ARRAY
4014: PUSH
4015: LD_INT 1
4017: ARRAY
4018: PPUSH
4019: LD_EXP 46
4023: PUSH
4024: LD_EXP 39
4028: PUSH
4029: LD_OWVAR 2
4033: ARRAY
4034: ARRAY
4035: PUSH
4036: LD_INT 2
4038: ARRAY
4039: PPUSH
4040: CALL_OW 86
// Anticheatcheck ;
4044: CALL_OW 514
// end ; end_of_file
4048: END
// every 1 1$0 + 0 0$1 do
4049: GO 4051
4051: DISABLE
// begin CreateCratesAnywhere ( Rand ( 3 , 5 ) , true ) ;
4052: LD_INT 3
4054: PPUSH
4055: LD_INT 5
4057: PPUSH
4058: CALL_OW 12
4062: PPUSH
4063: LD_INT 1
4065: PPUSH
4066: CALL_OW 57
// enable ;
4070: ENABLE
// end ;
4071: END
// every 0 0$1 + 0 0$1 do var i ;
4072: GO 4074
4074: DISABLE
4075: LD_INT 0
4077: PPUSH
// begin case tick of 1 .. 2 2$0 :
4078: LD_OWVAR 1
4082: PUSH
4083: LD_INT 1
4085: DOUBLE
4086: GREATEREQUAL
4087: IFFALSE 4095
4089: LD_INT 4200
4091: DOUBLE
4092: LESSEQUAL
4093: IFTRUE 4097
4095: GO 4125
4097: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4098: LD_EXP 20
4102: PUSH
4103: LD_INT 100
4105: DIVREAL
4106: PUSH
4107: LD_INT 350
4109: PPUSH
4110: LD_INT 1050
4112: PPUSH
4113: CALL_OW 12
4117: MUL
4118: PPUSH
4119: CALL_OW 67
4123: GO 4427
4125: LD_INT 2100
4127: PUSH
4128: LD_INT 1
4130: PLUS
4131: DOUBLE
4132: GREATEREQUAL
4133: IFFALSE 4141
4135: LD_INT 10500
4137: DOUBLE
4138: LESSEQUAL
4139: IFTRUE 4143
4141: GO 4171
4143: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4144: LD_EXP 20
4148: PUSH
4149: LD_INT 100
4151: DIVREAL
4152: PUSH
4153: LD_INT 1050
4155: PPUSH
4156: LD_INT 1575
4158: PPUSH
4159: CALL_OW 12
4163: MUL
4164: PPUSH
4165: CALL_OW 67
4169: GO 4427
4171: LD_INT 10500
4173: PUSH
4174: LD_INT 1
4176: PLUS
4177: DOUBLE
4178: GREATEREQUAL
4179: IFFALSE 4187
4181: LD_INT 21000
4183: DOUBLE
4184: LESSEQUAL
4185: IFTRUE 4189
4187: GO 4217
4189: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4190: LD_EXP 20
4194: PUSH
4195: LD_INT 100
4197: DIVREAL
4198: PUSH
4199: LD_INT 1575
4201: PPUSH
4202: LD_INT 2100
4204: PPUSH
4205: CALL_OW 12
4209: MUL
4210: PPUSH
4211: CALL_OW 67
4215: GO 4427
4217: LD_INT 21000
4219: PUSH
4220: LD_INT 1
4222: PLUS
4223: DOUBLE
4224: GREATEREQUAL
4225: IFFALSE 4233
4227: LD_INT 42000
4229: DOUBLE
4230: LESSEQUAL
4231: IFTRUE 4235
4233: GO 4263
4235: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4236: LD_EXP 20
4240: PUSH
4241: LD_INT 100
4243: DIVREAL
4244: PUSH
4245: LD_INT 2100
4247: PPUSH
4248: LD_INT 2625
4250: PPUSH
4251: CALL_OW 12
4255: MUL
4256: PPUSH
4257: CALL_OW 67
4261: GO 4427
4263: LD_INT 42000
4265: PUSH
4266: LD_INT 1
4268: PLUS
4269: DOUBLE
4270: GREATEREQUAL
4271: IFFALSE 4279
4273: LD_INT 63000
4275: DOUBLE
4276: LESSEQUAL
4277: IFTRUE 4281
4279: GO 4309
4281: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4282: LD_EXP 20
4286: PUSH
4287: LD_INT 100
4289: DIVREAL
4290: PUSH
4291: LD_INT 2625
4293: PPUSH
4294: LD_INT 3150
4296: PPUSH
4297: CALL_OW 12
4301: MUL
4302: PPUSH
4303: CALL_OW 67
4307: GO 4427
4309: LD_INT 63000
4311: PUSH
4312: LD_INT 1
4314: PLUS
4315: DOUBLE
4316: GREATEREQUAL
4317: IFFALSE 4325
4319: LD_INT 105000
4321: DOUBLE
4322: LESSEQUAL
4323: IFTRUE 4327
4325: GO 4355
4327: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4328: LD_EXP 20
4332: PUSH
4333: LD_INT 100
4335: DIVREAL
4336: PUSH
4337: LD_INT 3150
4339: PPUSH
4340: LD_INT 3675
4342: PPUSH
4343: CALL_OW 12
4347: MUL
4348: PPUSH
4349: CALL_OW 67
4353: GO 4427
4355: LD_INT 105000
4357: PUSH
4358: LD_INT 1
4360: PLUS
4361: DOUBLE
4362: GREATEREQUAL
4363: IFFALSE 4371
4365: LD_INT 630000
4367: DOUBLE
4368: LESSEQUAL
4369: IFTRUE 4373
4371: GO 4401
4373: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4374: LD_EXP 20
4378: PUSH
4379: LD_INT 100
4381: DIVREAL
4382: PUSH
4383: LD_INT 3675
4385: PPUSH
4386: LD_INT 4200
4388: PPUSH
4389: CALL_OW 12
4393: MUL
4394: PPUSH
4395: CALL_OW 67
4399: GO 4427
4401: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4402: LD_EXP 20
4406: PUSH
4407: LD_INT 100
4409: DIVREAL
4410: PUSH
4411: LD_INT 4200
4413: PPUSH
4414: LD_INT 5250
4416: PPUSH
4417: CALL_OW 12
4421: MUL
4422: PPUSH
4423: CALL_OW 67
// for i := 1 to 8 do
4427: LD_ADDR_VAR 0 1
4431: PUSH
4432: DOUBLE
4433: LD_INT 1
4435: DEC
4436: ST_TO_ADDR
4437: LD_INT 8
4439: PUSH
4440: FOR_TO
4441: IFFALSE 4544
// if Side_Positions [ i ] <> 0 then
4443: LD_EXP 39
4447: PUSH
4448: LD_VAR 0 1
4452: ARRAY
4453: PUSH
4454: LD_INT 0
4456: NONEQUAL
4457: IFFALSE 4542
// if not Side_IsSpec [ i ] then
4459: LD_EXP 38
4463: PUSH
4464: LD_VAR 0 1
4468: ARRAY
4469: NOT
4470: IFFALSE 4542
// begin CreateCratesXYR ( Rand ( 3 , 5 ) , start_def [ Side_Positions [ i ] ] [ 1 ] , start_def [ Side_Positions [ i ] ] [ 2 ] , 20 , true ) ;
4472: LD_INT 3
4474: PPUSH
4475: LD_INT 5
4477: PPUSH
4478: CALL_OW 12
4482: PPUSH
4483: LD_EXP 46
4487: PUSH
4488: LD_EXP 39
4492: PUSH
4493: LD_VAR 0 1
4497: ARRAY
4498: ARRAY
4499: PUSH
4500: LD_INT 1
4502: ARRAY
4503: PPUSH
4504: LD_EXP 46
4508: PUSH
4509: LD_EXP 39
4513: PUSH
4514: LD_VAR 0 1
4518: ARRAY
4519: ARRAY
4520: PUSH
4521: LD_INT 2
4523: ARRAY
4524: PPUSH
4525: LD_INT 20
4527: PPUSH
4528: LD_INT 1
4530: PPUSH
4531: CALL_OW 56
// Wait ( 2 ) ;
4535: LD_INT 2
4537: PPUSH
4538: CALL_OW 67
// end ;
4542: GO 4440
4544: POP
4545: POP
// enable ;
4546: ENABLE
// end ;
4547: PPOPN 1
4549: END
// every 0 0$20 + 0 0$1 do var i , filter ;
4550: GO 4552
4552: DISABLE
4553: LD_INT 0
4555: PPUSH
4556: PPUSH
// begin if GetResourceArea ( map_center , mat_cans ) < ( ( 200 - shipments_density ) / 100 * 5 ) then
4557: LD_INT 7
4559: PPUSH
4560: LD_INT 1
4562: PPUSH
4563: CALL_OW 287
4567: PUSH
4568: LD_INT 200
4570: PUSH
4571: LD_EXP 20
4575: MINUS
4576: PUSH
4577: LD_INT 100
4579: DIVREAL
4580: PUSH
4581: LD_INT 5
4583: MUL
4584: LESS
4585: IFFALSE 4608
// CreateCratesArea ( Rand ( 3 , 5 ) , map_center , true ) ;
4587: LD_INT 3
4589: PPUSH
4590: LD_INT 5
4592: PPUSH
4593: CALL_OW 12
4597: PPUSH
4598: LD_INT 7
4600: PPUSH
4601: LD_INT 1
4603: PPUSH
4604: CALL_OW 55
// enable ;
4608: ENABLE
// end ; end_of_file
4609: PPOPN 2
4611: END
// export clearedfog ; export function CanWinLoose ; begin
4612: LD_INT 0
4614: PPUSH
// Result := false ;
4615: LD_ADDR_VAR 0 1
4619: PUSH
4620: LD_INT 0
4622: ST_TO_ADDR
// if ( not IAmServer and ( ( EnemyCount = 0 ) or ( ( FriendsCount = 0 ) and ( TeamsCount < 2 ) ) ) ) then
4623: CALL_OW 518
4627: NOT
4628: PUSH
4629: CALL_OW 522
4633: PUSH
4634: LD_INT 0
4636: EQUAL
4637: PUSH
4638: CALL_OW 523
4642: PUSH
4643: LD_INT 0
4645: EQUAL
4646: PUSH
4647: CALL_OW 524
4651: PUSH
4652: LD_INT 2
4654: LESS
4655: AND
4656: OR
4657: AND
4658: IFFALSE 4668
// Result := true ;
4660: LD_ADDR_VAR 0 1
4664: PUSH
4665: LD_INT 1
4667: ST_TO_ADDR
// if ( IAmServer and ( PlayerCount = 0 ) ) then
4668: CALL_OW 518
4672: PUSH
4673: CALL_OW 519
4677: PUSH
4678: LD_INT 0
4680: EQUAL
4681: AND
4682: IFFALSE 4692
// Result := true ;
4684: LD_ADDR_VAR 0 1
4688: PUSH
4689: LD_INT 1
4691: ST_TO_ADDR
// end ;
4692: LD_VAR 0 1
4696: RET
// export function Init_Win_Condition ; begin
4697: LD_INT 0
4699: PPUSH
// disable ( 98 ) ;
4700: LD_INT 98
4702: DISABLE_MARKED
// disable ( 99 ) ;
4703: LD_INT 99
4705: DISABLE_MARKED
// case Game_Type of 1 :
4706: LD_EXP 1
4710: PUSH
4711: LD_INT 1
4713: DOUBLE
4714: EQUAL
4715: IFTRUE 4719
4717: GO 4736
4719: POP
// if Team_Game then
4720: LD_EXP 43
4724: IFFALSE 4731
// enable ( 98 ) else
4726: LD_INT 98
4728: ENABLE_MARKED
4729: GO 4734
// enable ( 99 ) ; 10 , 11 :
4731: LD_INT 99
4733: ENABLE_MARKED
4734: GO 4757
4736: LD_INT 10
4738: DOUBLE
4739: EQUAL
4740: IFTRUE 4750
4742: LD_INT 11
4744: DOUBLE
4745: EQUAL
4746: IFTRUE 4750
4748: GO 4756
4750: POP
// begin enable ( 101 ) ;
4751: LD_INT 101
4753: ENABLE_MARKED
// end ; end ;
4754: GO 4757
4756: POP
// end ;
4757: LD_VAR 0 1
4761: RET
// every 0 0$2 marked 98 do var win , i ;
4762: GO 4764
4764: DISABLE
4765: LD_INT 0
4767: PPUSH
4768: PPUSH
// begin if your_side then
4769: LD_OWVAR 2
4773: IFFALSE 4981
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
4775: LD_INT 22
4777: PUSH
4778: LD_OWVAR 2
4782: PUSH
4783: EMPTY
4784: LIST
4785: LIST
4786: PUSH
4787: LD_INT 2
4789: PUSH
4790: LD_INT 21
4792: PUSH
4793: LD_INT 1
4795: PUSH
4796: EMPTY
4797: LIST
4798: LIST
4799: PUSH
4800: LD_INT 30
4802: PUSH
4803: LD_INT 0
4805: PUSH
4806: EMPTY
4807: LIST
4808: LIST
4809: PUSH
4810: LD_INT 30
4812: PUSH
4813: LD_INT 1
4815: PUSH
4816: EMPTY
4817: LIST
4818: LIST
4819: PUSH
4820: EMPTY
4821: LIST
4822: LIST
4823: LIST
4824: LIST
4825: PUSH
4826: EMPTY
4827: LIST
4828: LIST
4829: PPUSH
4830: CALL_OW 69
4834: NOT
4835: IFFALSE 4852
// begin wait ( 0 0$3 ) ;
4837: LD_INT 105
4839: PPUSH
4840: CALL_OW 67
// YouLostInMultiplayer ;
4844: CALL_OW 107
// exit ;
4848: GO 4982
// end else
4850: GO 4981
// begin win := true ;
4852: LD_ADDR_VAR 0 1
4856: PUSH
4857: LD_INT 1
4859: ST_TO_ADDR
// for i = 1 to Side_positions do
4860: LD_ADDR_VAR 0 2
4864: PUSH
4865: DOUBLE
4866: LD_INT 1
4868: DEC
4869: ST_TO_ADDR
4870: LD_EXP 39
4874: PUSH
4875: FOR_TO
4876: IFFALSE 4960
// if Side_positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
4878: LD_EXP 39
4882: PUSH
4883: LD_VAR 0 2
4887: ARRAY
4888: PUSH
4889: LD_VAR 0 2
4893: PUSH
4894: LD_OWVAR 2
4898: NONEQUAL
4899: AND
4900: PUSH
4901: LD_VAR 0 2
4905: PPUSH
4906: CALL_OW 108
4910: AND
4911: IFFALSE 4958
// begin if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
4913: LD_EXP 36
4917: PUSH
4918: LD_VAR 0 2
4922: ARRAY
4923: NOT
4924: PUSH
4925: LD_EXP 36
4929: PUSH
4930: LD_VAR 0 2
4934: ARRAY
4935: PUSH
4936: LD_EXP 36
4940: PUSH
4941: LD_OWVAR 2
4945: ARRAY
4946: NONEQUAL
4947: OR
4948: IFFALSE 4958
// win := false ;
4950: LD_ADDR_VAR 0 1
4954: PUSH
4955: LD_INT 0
4957: ST_TO_ADDR
// end ;
4958: GO 4875
4960: POP
4961: POP
// if win then
4962: LD_VAR 0 1
4966: IFFALSE 4981
// begin wait ( 0 0$3 ) ;
4968: LD_INT 105
4970: PPUSH
4971: CALL_OW 67
// YouWinInMultiplayer ;
4975: CALL_OW 106
// exit ;
4979: GO 4982
// end ; end ; enable ;
4981: ENABLE
// end ;
4982: PPOPN 2
4984: END
// every 0 0$3 marked 99 do var win , i ;
4985: GO 4987
4987: DISABLE
4988: LD_INT 0
4990: PPUSH
4991: PPUSH
// begin if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
4992: LD_INT 22
4994: PUSH
4995: LD_OWVAR 2
4999: PUSH
5000: EMPTY
5001: LIST
5002: LIST
5003: PUSH
5004: LD_INT 2
5006: PUSH
5007: LD_INT 21
5009: PUSH
5010: LD_INT 1
5012: PUSH
5013: EMPTY
5014: LIST
5015: LIST
5016: PUSH
5017: LD_INT 30
5019: PUSH
5020: LD_INT 0
5022: PUSH
5023: EMPTY
5024: LIST
5025: LIST
5026: PUSH
5027: LD_INT 30
5029: PUSH
5030: LD_INT 1
5032: PUSH
5033: EMPTY
5034: LIST
5035: LIST
5036: PUSH
5037: EMPTY
5038: LIST
5039: LIST
5040: LIST
5041: LIST
5042: PUSH
5043: EMPTY
5044: LIST
5045: LIST
5046: PPUSH
5047: CALL_OW 69
5051: NOT
5052: IFFALSE 5069
// begin wait ( 0 0$3 ) ;
5054: LD_INT 105
5056: PPUSH
5057: CALL_OW 67
// YouLostInMultiplayer ;
5061: CALL_OW 107
// exit ;
5065: GO 5179
// end else
5067: GO 5178
// begin win := true ;
5069: LD_ADDR_VAR 0 1
5073: PUSH
5074: LD_INT 1
5076: ST_TO_ADDR
// for i = 1 to Side_Positions do
5077: LD_ADDR_VAR 0 2
5081: PUSH
5082: DOUBLE
5083: LD_INT 1
5085: DEC
5086: ST_TO_ADDR
5087: LD_EXP 39
5091: PUSH
5092: FOR_TO
5093: IFFALSE 5157
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
5095: LD_EXP 39
5099: PUSH
5100: LD_VAR 0 2
5104: ARRAY
5105: PUSH
5106: LD_VAR 0 2
5110: PUSH
5111: LD_OWVAR 2
5115: NONEQUAL
5116: AND
5117: PUSH
5118: LD_VAR 0 2
5122: PPUSH
5123: CALL_OW 108
5127: AND
5128: IFFALSE 5155
// if not AlliedSides ( i , your_side ) then
5130: LD_VAR 0 2
5134: PPUSH
5135: LD_OWVAR 2
5139: PPUSH
5140: CALL 5425 0 2
5144: NOT
5145: IFFALSE 5155
// win := false ;
5147: LD_ADDR_VAR 0 1
5151: PUSH
5152: LD_INT 0
5154: ST_TO_ADDR
5155: GO 5092
5157: POP
5158: POP
// if win then
5159: LD_VAR 0 1
5163: IFFALSE 5178
// begin wait ( 0 0$3 ) ;
5165: LD_INT 105
5167: PPUSH
5168: CALL_OW 67
// YouWinInMultiplayer ;
5172: CALL_OW 106
// exit ;
5176: GO 5179
// end ; end ; enable ;
5178: ENABLE
// end ;
5179: PPOPN 2
5181: END
// every 0 0$3 marked 101 do var win , i ;
5182: GO 5184
5184: DISABLE
5185: LD_INT 0
5187: PPUSH
5188: PPUSH
// begin if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
5189: LD_INT 22
5191: PUSH
5192: LD_OWVAR 2
5196: PUSH
5197: EMPTY
5198: LIST
5199: LIST
5200: PUSH
5201: LD_INT 2
5203: PUSH
5204: LD_INT 21
5206: PUSH
5207: LD_INT 1
5209: PUSH
5210: EMPTY
5211: LIST
5212: LIST
5213: PUSH
5214: LD_INT 30
5216: PUSH
5217: LD_INT 0
5219: PUSH
5220: EMPTY
5221: LIST
5222: LIST
5223: PUSH
5224: LD_INT 30
5226: PUSH
5227: LD_INT 1
5229: PUSH
5230: EMPTY
5231: LIST
5232: LIST
5233: PUSH
5234: EMPTY
5235: LIST
5236: LIST
5237: LIST
5238: LIST
5239: PUSH
5240: EMPTY
5241: LIST
5242: LIST
5243: PPUSH
5244: CALL_OW 69
5248: NOT
5249: IFFALSE 5303
// begin wait ( 0 0$3 ) ;
5251: LD_INT 105
5253: PPUSH
5254: CALL_OW 67
// if CanWinLoose then
5258: CALL 4612 0 0
5262: IFFALSE 5270
// YouLostInMultiplayer else
5264: CALL_OW 107
5268: GO 5299
// begin if not clearedfog then
5270: LD_EXP 51
5274: NOT
5275: IFFALSE 5298
// begin ClearAllFogForSide ( your_side ) ;
5277: LD_OWVAR 2
5281: PPUSH
5282: CALL_OW 520
// clearedfog := true ;
5286: LD_ADDR_EXP 51
5290: PUSH
5291: LD_INT 1
5293: ST_TO_ADDR
// Multiplayer_Loose_Message ;
5294: CALL_OW 521
// end ; enable ;
5298: ENABLE
// end ; exit ;
5299: GO 5422
// end else
5301: GO 5421
// begin win := true ;
5303: LD_ADDR_VAR 0 1
5307: PUSH
5308: LD_INT 1
5310: ST_TO_ADDR
// for i = 1 to Side_Positions do
5311: LD_ADDR_VAR 0 2
5315: PUSH
5316: DOUBLE
5317: LD_INT 1
5319: DEC
5320: ST_TO_ADDR
5321: LD_EXP 39
5325: PUSH
5326: FOR_TO
5327: IFFALSE 5391
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
5329: LD_EXP 39
5333: PUSH
5334: LD_VAR 0 2
5338: ARRAY
5339: PUSH
5340: LD_VAR 0 2
5344: PUSH
5345: LD_OWVAR 2
5349: NONEQUAL
5350: AND
5351: PUSH
5352: LD_VAR 0 2
5356: PPUSH
5357: CALL_OW 108
5361: AND
5362: IFFALSE 5389
// if not AlliedSides ( i , your_side ) then
5364: LD_VAR 0 2
5368: PPUSH
5369: LD_OWVAR 2
5373: PPUSH
5374: CALL 5425 0 2
5378: NOT
5379: IFFALSE 5389
// win := false ;
5381: LD_ADDR_VAR 0 1
5385: PUSH
5386: LD_INT 0
5388: ST_TO_ADDR
5389: GO 5326
5391: POP
5392: POP
// if win then
5393: LD_VAR 0 1
5397: IFFALSE 5421
// begin wait ( 0 0$3 ) ;
5399: LD_INT 105
5401: PPUSH
5402: CALL_OW 67
// if CanWinLoose then
5406: CALL 4612 0 0
5410: IFFALSE 5418
// YouWinInMultiplayer else
5412: CALL_OW 106
5416: GO 5419
// enable ;
5418: ENABLE
// exit ;
5419: GO 5422
// end ; end ; enable ;
5421: ENABLE
// end ;
5422: PPOPN 2
5424: END
// function AlliedSides ( i , j ) ; var vysledek ; begin
5425: LD_INT 0
5427: PPUSH
5428: PPUSH
// vysledek := false ;
5429: LD_ADDR_VAR 0 4
5433: PUSH
5434: LD_INT 0
5436: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
5437: LD_VAR 0 1
5441: PPUSH
5442: LD_VAR 0 2
5446: PPUSH
5447: CALL_OW 81
5451: PUSH
5452: LD_INT 1
5454: EQUAL
5455: PUSH
5456: LD_VAR 0 2
5460: PPUSH
5461: LD_VAR 0 1
5465: PPUSH
5466: CALL_OW 81
5470: PUSH
5471: LD_INT 1
5473: EQUAL
5474: AND
5475: PUSH
5476: LD_VAR 0 1
5480: PPUSH
5481: CALL_OW 83
5485: AND
5486: PUSH
5487: LD_VAR 0 2
5491: PPUSH
5492: CALL_OW 83
5496: AND
5497: IFFALSE 5507
// vysledek := true ;
5499: LD_ADDR_VAR 0 4
5503: PUSH
5504: LD_INT 1
5506: ST_TO_ADDR
// result := vysledek ;
5507: LD_ADDR_VAR 0 3
5511: PUSH
5512: LD_VAR 0 4
5516: ST_TO_ADDR
// end ; end_of_file
5517: LD_VAR 0 3
5521: RET
// export function prepare_apemen ; var i , n1 , n2 , ape , delay , first , d1 , d2 ; begin
5522: LD_INT 0
5524: PPUSH
5525: PPUSH
5526: PPUSH
5527: PPUSH
5528: PPUSH
5529: PPUSH
5530: PPUSH
5531: PPUSH
5532: PPUSH
// if not spawning_koef_of_apemen then
5533: LD_EXP 22
5537: NOT
5538: IFFALSE 5542
// exit ;
5540: GO 5880
// delay := 2 2$0 ;
5542: LD_ADDR_VAR 0 6
5546: PUSH
5547: LD_INT 4200
5549: ST_TO_ADDR
// repeat d1 := Rand ( delay div 4 , delay ) ;
5550: LD_ADDR_VAR 0 8
5554: PUSH
5555: LD_VAR 0 6
5559: PUSH
5560: LD_INT 4
5562: DIV
5563: PPUSH
5564: LD_VAR 0 6
5568: PPUSH
5569: CALL_OW 12
5573: ST_TO_ADDR
// d2 := Rand ( 0 , delay div 4 ) ;
5574: LD_ADDR_VAR 0 9
5578: PUSH
5579: LD_INT 0
5581: PPUSH
5582: LD_VAR 0 6
5586: PUSH
5587: LD_INT 4
5589: DIV
5590: PPUSH
5591: CALL_OW 12
5595: ST_TO_ADDR
// delay := delay * spawning_koef_of_apemen div 100 ;
5596: LD_ADDR_VAR 0 6
5600: PUSH
5601: LD_VAR 0 6
5605: PUSH
5606: LD_EXP 22
5610: MUL
5611: PUSH
5612: LD_INT 100
5614: DIV
5615: ST_TO_ADDR
// first := Rand ( 1 , 2 ) ;
5616: LD_ADDR_VAR 0 7
5620: PUSH
5621: LD_INT 1
5623: PPUSH
5624: LD_INT 2
5626: PPUSH
5627: CALL_OW 12
5631: ST_TO_ADDR
// wait ( d1 ) ;
5632: LD_VAR 0 8
5636: PPUSH
5637: CALL_OW 67
// for i := 1 to 2 do
5641: LD_ADDR_VAR 0 2
5645: PUSH
5646: DOUBLE
5647: LD_INT 1
5649: DEC
5650: ST_TO_ADDR
5651: LD_INT 2
5653: PUSH
5654: FOR_TO
5655: IFFALSE 5874
// begin uc_side := 0 ;
5657: LD_ADDR_OWVAR 20
5661: PUSH
5662: LD_INT 0
5664: ST_TO_ADDR
// uc_nation := nation_nature ;
5665: LD_ADDR_OWVAR 21
5669: PUSH
5670: LD_INT 0
5672: ST_TO_ADDR
// hc_class := class_apeman ;
5673: LD_ADDR_OWVAR 28
5677: PUSH
5678: LD_INT 12
5680: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
5681: LD_ADDR_OWVAR 30
5685: PUSH
5686: LD_INT 1
5688: PUSH
5689: LD_INT 1
5691: PUSH
5692: LD_INT 1
5694: PUSH
5695: LD_INT 1
5697: PUSH
5698: EMPTY
5699: LIST
5700: LIST
5701: LIST
5702: LIST
5703: ST_TO_ADDR
// hc_skills := [ initial_level - 1 , initial_level - 1 , initial_level - 1 , initial_level - 1 ] ;
5704: LD_ADDR_OWVAR 31
5708: PUSH
5709: LD_EXP 17
5713: PUSH
5714: LD_INT 1
5716: MINUS
5717: PUSH
5718: LD_EXP 17
5722: PUSH
5723: LD_INT 1
5725: MINUS
5726: PUSH
5727: LD_EXP 17
5731: PUSH
5732: LD_INT 1
5734: MINUS
5735: PUSH
5736: LD_EXP 17
5740: PUSH
5741: LD_INT 1
5743: MINUS
5744: PUSH
5745: EMPTY
5746: LIST
5747: LIST
5748: LIST
5749: LIST
5750: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
5751: LD_ADDR_OWVAR 29
5755: PUSH
5756: LD_INT 10
5758: PUSH
5759: LD_INT 12
5761: PUSH
5762: EMPTY
5763: LIST
5764: LIST
5765: ST_TO_ADDR
// hc_sex := sex_male ;
5766: LD_ADDR_OWVAR 27
5770: PUSH
5771: LD_INT 1
5773: ST_TO_ADDR
// hc_importance := 0 ;
5774: LD_ADDR_OWVAR 32
5778: PUSH
5779: LD_INT 0
5781: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
5782: LD_ADDR_OWVAR 35
5786: PUSH
5787: LD_INT 20
5789: NEG
5790: PPUSH
5791: LD_INT 20
5793: PPUSH
5794: CALL_OW 12
5798: ST_TO_ADDR
// ape := CreateHuman ;
5799: LD_ADDR_VAR 0 5
5803: PUSH
5804: CALL_OW 44
5808: ST_TO_ADDR
// if i = first then
5809: LD_VAR 0 2
5813: PUSH
5814: LD_VAR 0 7
5818: EQUAL
5819: IFFALSE 5838
// PlaceUnitArea ( ape , south_apeman , false ) else
5821: LD_VAR 0 5
5825: PPUSH
5826: LD_INT 2
5828: PPUSH
5829: LD_INT 0
5831: PPUSH
5832: CALL_OW 49
5836: GO 5853
// PlaceUnitArea ( ape , north_apeman , false ) ;
5838: LD_VAR 0 5
5842: PPUSH
5843: LD_INT 1
5845: PPUSH
5846: LD_INT 0
5848: PPUSH
5849: CALL_OW 49
// if i = 1 then
5853: LD_VAR 0 2
5857: PUSH
5858: LD_INT 1
5860: EQUAL
5861: IFFALSE 5872
// wait ( d2 ) ;
5863: LD_VAR 0 9
5867: PPUSH
5868: CALL_OW 67
// end ;
5872: GO 5654
5874: POP
5875: POP
// until false ;
5876: LD_INT 0
5878: IFFALSE 5550
// end ; end_of_file
5880: LD_VAR 0 1
5884: RET
// export function DisplayNames ; var i ; begin
5885: LD_INT 0
5887: PPUSH
5888: PPUSH
// for i in FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) do
5889: LD_ADDR_VAR 0 2
5893: PUSH
5894: LD_INT 2
5896: PUSH
5897: LD_INT 30
5899: PUSH
5900: LD_INT 0
5902: PUSH
5903: EMPTY
5904: LIST
5905: LIST
5906: PUSH
5907: LD_INT 30
5909: PUSH
5910: LD_INT 1
5912: PUSH
5913: EMPTY
5914: LIST
5915: LIST
5916: PUSH
5917: EMPTY
5918: LIST
5919: LIST
5920: LIST
5921: PPUSH
5922: CALL_OW 69
5926: PUSH
5927: FOR_IN
5928: IFFALSE 5955
// SetBName ( i , @ & GetSide ( i ) ) ;
5930: LD_VAR 0 2
5934: PPUSH
5935: LD_STRING @
5937: PUSH
5938: LD_VAR 0 2
5942: PPUSH
5943: CALL_OW 255
5947: STR
5948: PPUSH
5949: CALL_OW 500
5953: GO 5927
5955: POP
5956: POP
// end ;
5957: LD_VAR 0 1
5961: RET
// every 0 0$2 do
5962: GO 5964
5964: DISABLE
// DisplayNames ;
5965: CALL 5885 0 0
5969: END
// on BuildingComplete ( b ) do DisplayNames ;
5970: CALL 5885 0 0
5974: PPOPN 1
5976: END
// on BuildingStarted ( b , h ) do DisplayNames ;
5977: CALL 5885 0 0
5981: PPOPN 2
5983: END
// on BuildingCaptured ( b , o , e ) do DisplayNames ; end_of_file
5984: CALL 5885 0 0
5988: PPOPN 3
5990: END
// var strength , lastxwin , lastywin , lastxlost , lastylost ; function Update_Flags ; var un ; begin
5991: LD_INT 0
5993: PPUSH
5994: PPUSH
// for un in battle_flags_id do
5995: LD_ADDR_VAR 0 2
5999: PUSH
6000: LD_EXP 48
6004: PUSH
6005: FOR_IN
6006: IFFALSE 6081
// ChangeBattleFlagOptions ( un , [ [ bfo_defend_bonus_human , strength ] , [ bfo_defend_bonus_vehicle , strength div 2 ] , [ bfo_defend_bonus_building , strength div 5 ] , [ bfo_height , strength ] ] ) ;
6008: LD_VAR 0 2
6012: PPUSH
6013: LD_INT 1
6015: PUSH
6016: LD_LOC 4
6020: PUSH
6021: EMPTY
6022: LIST
6023: LIST
6024: PUSH
6025: LD_INT 2
6027: PUSH
6028: LD_LOC 4
6032: PUSH
6033: LD_INT 2
6035: DIV
6036: PUSH
6037: EMPTY
6038: LIST
6039: LIST
6040: PUSH
6041: LD_INT 3
6043: PUSH
6044: LD_LOC 4
6048: PUSH
6049: LD_INT 5
6051: DIV
6052: PUSH
6053: EMPTY
6054: LIST
6055: LIST
6056: PUSH
6057: LD_INT 20
6059: PUSH
6060: LD_LOC 4
6064: PUSH
6065: EMPTY
6066: LIST
6067: LIST
6068: PUSH
6069: EMPTY
6070: LIST
6071: LIST
6072: LIST
6073: LIST
6074: PPUSH
6075: CALL_OW 423
6079: GO 6005
6081: POP
6082: POP
// end ;
6083: LD_VAR 0 1
6087: RET
// every 0 0$0.1 do var un ;
6088: GO 6090
6090: DISABLE
6091: LD_INT 0
6093: PPUSH
// begin if not def_morale_flags then
6094: LD_EXP 9
6098: NOT
6099: IFFALSE 6103
// exit ;
6101: GO 6180
// if not morale_decreasing_time then
6103: LD_EXP 21
6107: NOT
6108: IFFALSE 6112
// exit ;
6110: GO 6180
// strength = 100 ;
6112: LD_ADDR_LOC 4
6116: PUSH
6117: LD_INT 100
6119: ST_TO_ADDR
// repeat wait ( morale_decreasing_time ) ;
6120: LD_EXP 21
6124: PPUSH
6125: CALL_OW 67
// strength := strength - 1 ;
6129: LD_ADDR_LOC 4
6133: PUSH
6134: LD_LOC 4
6138: PUSH
6139: LD_INT 1
6141: MINUS
6142: ST_TO_ADDR
// Update_Flags ;
6143: CALL 5991 0 0
// until not strength ;
6147: LD_LOC 4
6151: NOT
6152: IFFALSE 6120
// for un in battle_flags_id do
6154: LD_ADDR_VAR 0 1
6158: PUSH
6159: LD_EXP 48
6163: PUSH
6164: FOR_IN
6165: IFFALSE 6178
// KillBattleFlag ( un ) ;
6167: LD_VAR 0 1
6171: PPUSH
6172: CALL_OW 419
6176: GO 6164
6178: POP
6179: POP
// end ; end_of_file
6180: PPOPN 1
6182: END
// every 10 do
6183: GO 6185
6185: DISABLE
// begin if not multiplayer then
6186: LD_OWVAR 4
6190: NOT
6191: IFFALSE 6195
// exit ;
6193: GO 6252
// if ( tick >= 100 ) then
6195: LD_OWVAR 1
6199: PUSH
6200: LD_INT 100
6202: GREATEREQUAL
6203: IFFALSE 6223
// if tick mod 20 = 0 then
6205: LD_OWVAR 1
6209: PUSH
6210: LD_INT 20
6212: MOD
6213: PUSH
6214: LD_INT 0
6216: EQUAL
6217: IFFALSE 6223
// MultiplayerCRC ;
6219: CALL_OW 361
// if ( tick >= 100 ) then
6223: LD_OWVAR 1
6227: PUSH
6228: LD_INT 100
6230: GREATEREQUAL
6231: IFFALSE 6251
// if tick mod 30 = 0 then
6233: LD_OWVAR 1
6237: PUSH
6238: LD_INT 30
6240: MOD
6241: PUSH
6242: LD_INT 0
6244: EQUAL
6245: IFFALSE 6251
// DebugLogAll ;
6247: CALL_OW 360
// enable ;
6251: ENABLE
// end ; end_of_file
6252: END
// every 0 0$1 + 0 0$0.5 do
6253: GO 6255
6255: DISABLE
// begin display_strings = [ #Multi1x1-Time , tick ] ;
6256: LD_ADDR_OWVAR 47
6260: PUSH
6261: LD_STRING #Multi1x1-Time
6263: PUSH
6264: LD_OWVAR 1
6268: PUSH
6269: EMPTY
6270: LIST
6271: LIST
6272: ST_TO_ADDR
// enable ;
6273: ENABLE
// end ; end_of_file
6274: END
// export artefact_number , artefact_num , artefact_size ; export labs_in_use ; export function init_alien_research ; var art_icons , art_events , art_difficulty , art_cost , art_recharge ; begin
6275: LD_INT 0
6277: PPUSH
6278: PPUSH
6279: PPUSH
6280: PPUSH
6281: PPUSH
6282: PPUSH
// artefact_number := 3 ;
6283: LD_ADDR_EXP 52
6287: PUSH
6288: LD_INT 3
6290: ST_TO_ADDR
// artefact_num := [ 1 , 0 , 2 , 0 , 3 ] ;
6291: LD_ADDR_EXP 53
6295: PUSH
6296: LD_INT 1
6298: PUSH
6299: LD_INT 0
6301: PUSH
6302: LD_INT 2
6304: PUSH
6305: LD_INT 0
6307: PUSH
6308: LD_INT 3
6310: PUSH
6311: EMPTY
6312: LIST
6313: LIST
6314: LIST
6315: LIST
6316: LIST
6317: ST_TO_ADDR
// artefact_size := [ 1 , 3 , 5 ] ;
6318: LD_ADDR_EXP 54
6322: PUSH
6323: LD_INT 1
6325: PUSH
6326: LD_INT 3
6328: PUSH
6329: LD_INT 5
6331: PUSH
6332: EMPTY
6333: LIST
6334: LIST
6335: LIST
6336: ST_TO_ADDR
// art_icons := [ [ art_exp_left , art_use_eye ] , [ art_exp_mid , art_use_sibexplosion ] , [ art_exp_right , art_use_power ] ] ;
6337: LD_ADDR_VAR 0 2
6341: PUSH
6342: LD_INT 1
6344: PUSH
6345: LD_INT 4
6347: PUSH
6348: EMPTY
6349: LIST
6350: LIST
6351: PUSH
6352: LD_INT 2
6354: PUSH
6355: LD_INT 5
6357: PUSH
6358: EMPTY
6359: LIST
6360: LIST
6361: PUSH
6362: LD_INT 3
6364: PUSH
6365: LD_INT 9
6367: PUSH
6368: EMPTY
6369: LIST
6370: LIST
6371: PUSH
6372: EMPTY
6373: LIST
6374: LIST
6375: LIST
6376: ST_TO_ADDR
// art_events := [ art_place , art_unit , art_place ] ;
6377: LD_ADDR_VAR 0 3
6381: PUSH
6382: LD_INT 3
6384: PUSH
6385: LD_INT 4
6387: PUSH
6388: LD_INT 3
6390: PUSH
6391: EMPTY
6392: LIST
6393: LIST
6394: LIST
6395: ST_TO_ADDR
// art_difficulty := [ 150 , 250 , 400 ] ;
6396: LD_ADDR_VAR 0 4
6400: PUSH
6401: LD_INT 150
6403: PUSH
6404: LD_INT 250
6406: PUSH
6407: LD_INT 400
6409: PUSH
6410: EMPTY
6411: LIST
6412: LIST
6413: LIST
6414: ST_TO_ADDR
// art_cost := [ 2 , 10 , 20 ] ;
6415: LD_ADDR_VAR 0 5
6419: PUSH
6420: LD_INT 2
6422: PUSH
6423: LD_INT 10
6425: PUSH
6426: LD_INT 20
6428: PUSH
6429: EMPTY
6430: LIST
6431: LIST
6432: LIST
6433: ST_TO_ADDR
// art_recharge := [ 6 , 18 , 50 ] ;
6434: LD_ADDR_VAR 0 6
6438: PUSH
6439: LD_INT 6
6441: PUSH
6442: LD_INT 18
6444: PUSH
6445: LD_INT 50
6447: PUSH
6448: EMPTY
6449: LIST
6450: LIST
6451: LIST
6452: ST_TO_ADDR
// Get_Init_Artefacts ( art_icons , art_events , art_difficulty , art_cost , art_recharge ) ;
6453: LD_VAR 0 2
6457: PPUSH
6458: LD_VAR 0 3
6462: PPUSH
6463: LD_VAR 0 4
6467: PPUSH
6468: LD_VAR 0 5
6472: PPUSH
6473: LD_VAR 0 6
6477: PPUSH
6478: CALL 6487 0 5
// end ;
6482: LD_VAR 0 1
6486: RET
// function Get_Init_Artefacts ( art_icons , art_events , art_difficulty , art_cost , art_recharge ) ; var un , i , side , base ; begin
6487: LD_INT 0
6489: PPUSH
6490: PPUSH
6491: PPUSH
6492: PPUSH
6493: PPUSH
// disable ( 1 ) ;
6494: LD_INT 1
6496: DISABLE_MARKED
// disable ( 5 ) ;
6497: LD_INT 5
6499: DISABLE_MARKED
// disable ( 6 ) ;
6500: LD_INT 6
6502: DISABLE_MARKED
// disable ( 7 ) ;
6503: LD_INT 7
6505: DISABLE_MARKED
// for side = 1 to 8 do
6506: LD_ADDR_VAR 0 9
6510: PUSH
6511: DOUBLE
6512: LD_INT 1
6514: DEC
6515: ST_TO_ADDR
6516: LD_INT 8
6518: PUSH
6519: FOR_TO
6520: IFFALSE 6536
// SetArtifactRes ( side , state_enabled ) ;
6522: LD_VAR 0 9
6526: PPUSH
6527: LD_INT 1
6529: PPUSH
6530: CALL_OW 467
6534: GO 6519
6536: POP
6537: POP
// for un = 0 to ( artefact_number - 1 ) do
6538: LD_ADDR_VAR 0 7
6542: PUSH
6543: DOUBLE
6544: LD_INT 0
6546: DEC
6547: ST_TO_ADDR
6548: LD_EXP 52
6552: PUSH
6553: LD_INT 1
6555: MINUS
6556: PUSH
6557: FOR_TO
6558: IFFALSE 6956
// begin base := un * 100 ;
6560: LD_ADDR_VAR 0 10
6564: PUSH
6565: LD_VAR 0 7
6569: PUSH
6570: LD_INT 100
6572: MUL
6573: ST_TO_ADDR
// SetTag ( base + 01 , art_icons [ un + 1 ] [ 1 ] ) ;
6574: LD_VAR 0 10
6578: PUSH
6579: LD_INT 1
6581: PLUS
6582: PPUSH
6583: LD_VAR 0 1
6587: PUSH
6588: LD_VAR 0 7
6592: PUSH
6593: LD_INT 1
6595: PLUS
6596: ARRAY
6597: PUSH
6598: LD_INT 1
6600: ARRAY
6601: PPUSH
6602: CALL_OW 109
// SetTag ( base + 02 , art_icons [ un + 1 ] [ 2 ] ) ;
6606: LD_VAR 0 10
6610: PUSH
6611: LD_INT 2
6613: PLUS
6614: PPUSH
6615: LD_VAR 0 1
6619: PUSH
6620: LD_VAR 0 7
6624: PUSH
6625: LD_INT 1
6627: PLUS
6628: ARRAY
6629: PUSH
6630: LD_INT 2
6632: ARRAY
6633: PPUSH
6634: CALL_OW 109
// SetTag ( base + 03 , art_events [ un + 1 ] ) ;
6638: LD_VAR 0 10
6642: PUSH
6643: LD_INT 3
6645: PLUS
6646: PPUSH
6647: LD_VAR 0 2
6651: PUSH
6652: LD_VAR 0 7
6656: PUSH
6657: LD_INT 1
6659: PLUS
6660: ARRAY
6661: PPUSH
6662: CALL_OW 109
// SetTag ( base + 05 , art_difficulty [ un + 1 ] ) ;
6666: LD_VAR 0 10
6670: PUSH
6671: LD_INT 5
6673: PLUS
6674: PPUSH
6675: LD_VAR 0 3
6679: PUSH
6680: LD_VAR 0 7
6684: PUSH
6685: LD_INT 1
6687: PLUS
6688: ARRAY
6689: PPUSH
6690: CALL_OW 109
// SetTag ( base + 06 , art_cost [ un + 1 ] ) ;
6694: LD_VAR 0 10
6698: PUSH
6699: LD_INT 6
6701: PLUS
6702: PPUSH
6703: LD_VAR 0 4
6707: PUSH
6708: LD_VAR 0 7
6712: PUSH
6713: LD_INT 1
6715: PLUS
6716: ARRAY
6717: PPUSH
6718: CALL_OW 109
// SetTag ( base + 07 , art_recharge [ un + 1 ] ) ;
6722: LD_VAR 0 10
6726: PUSH
6727: LD_INT 7
6729: PLUS
6730: PPUSH
6731: LD_VAR 0 5
6735: PUSH
6736: LD_VAR 0 7
6740: PUSH
6741: LD_INT 1
6743: PLUS
6744: ARRAY
6745: PPUSH
6746: CALL_OW 109
// SetTag ( base + 08 , false ) ;
6750: LD_VAR 0 10
6754: PUSH
6755: LD_INT 8
6757: PLUS
6758: PPUSH
6759: LD_INT 0
6761: PPUSH
6762: CALL_OW 109
// SetTag ( base + 09 , false ) ;
6766: LD_VAR 0 10
6770: PUSH
6771: LD_INT 9
6773: PLUS
6774: PPUSH
6775: LD_INT 0
6777: PPUSH
6778: CALL_OW 109
// SetTag ( base + 11 , 0 ) ;
6782: LD_VAR 0 10
6786: PUSH
6787: LD_INT 11
6789: PLUS
6790: PPUSH
6791: LD_INT 0
6793: PPUSH
6794: CALL_OW 109
// SetTag ( base + 12 , false ) ;
6798: LD_VAR 0 10
6802: PUSH
6803: LD_INT 12
6805: PLUS
6806: PPUSH
6807: LD_INT 0
6809: PPUSH
6810: CALL_OW 109
// SetTag ( base + 13 , false ) ;
6814: LD_VAR 0 10
6818: PUSH
6819: LD_INT 13
6821: PLUS
6822: PPUSH
6823: LD_INT 0
6825: PPUSH
6826: CALL_OW 109
// for i = 0 to 7 do
6830: LD_ADDR_VAR 0 8
6834: PUSH
6835: DOUBLE
6836: LD_INT 0
6838: DEC
6839: ST_TO_ADDR
6840: LD_INT 7
6842: PUSH
6843: FOR_TO
6844: IFFALSE 6952
// begin SetTag ( base + i * 10 + 21 , false ) ;
6846: LD_VAR 0 10
6850: PUSH
6851: LD_VAR 0 8
6855: PUSH
6856: LD_INT 10
6858: MUL
6859: PLUS
6860: PUSH
6861: LD_INT 21
6863: PLUS
6864: PPUSH
6865: LD_INT 0
6867: PPUSH
6868: CALL_OW 109
// SetTag ( base + i * 10 + 22 , 0 ) ;
6872: LD_VAR 0 10
6876: PUSH
6877: LD_VAR 0 8
6881: PUSH
6882: LD_INT 10
6884: MUL
6885: PLUS
6886: PUSH
6887: LD_INT 22
6889: PLUS
6890: PPUSH
6891: LD_INT 0
6893: PPUSH
6894: CALL_OW 109
// SetTag ( base + i * 10 + 23 , 0 ) ;
6898: LD_VAR 0 10
6902: PUSH
6903: LD_VAR 0 8
6907: PUSH
6908: LD_INT 10
6910: MUL
6911: PLUS
6912: PUSH
6913: LD_INT 23
6915: PLUS
6916: PPUSH
6917: LD_INT 0
6919: PPUSH
6920: CALL_OW 109
// SetTag ( base + i * 10 + 25 , 0 ) ;
6924: LD_VAR 0 10
6928: PUSH
6929: LD_VAR 0 8
6933: PUSH
6934: LD_INT 10
6936: MUL
6937: PLUS
6938: PUSH
6939: LD_INT 25
6941: PLUS
6942: PPUSH
6943: LD_INT 0
6945: PPUSH
6946: CALL_OW 109
// end ;
6950: GO 6843
6952: POP
6953: POP
// end ;
6954: GO 6557
6956: POP
6957: POP
// enable ( 20 ) ;
6958: LD_INT 20
6960: ENABLE_MARKED
// labs_in_use := [ ] ;
6961: LD_ADDR_EXP 55
6965: PUSH
6966: EMPTY
6967: ST_TO_ADDR
// if not def_artefact_one then
6968: LD_EXP 25
6972: NOT
6973: IFFALSE 7000
// begin CreateResourcesArea ( mat_artefact , artefact_size [ 1 ] , artefact_area , false ) ;
6975: LD_INT 4
6977: PPUSH
6978: LD_EXP 54
6982: PUSH
6983: LD_INT 1
6985: ARRAY
6986: PPUSH
6987: LD_INT 13
6989: PPUSH
6990: LD_INT 0
6992: PPUSH
6993: CALL_OW 59
// enable ( 5 ) ;
6997: LD_INT 5
6999: ENABLE_MARKED
// end ; if not def_artefact_two then
7000: LD_EXP 26
7004: NOT
7005: IFFALSE 7032
// begin CreateResourcesArea ( mat_artefact , artefact_size [ 2 ] , artefact_area , false ) ;
7007: LD_INT 4
7009: PPUSH
7010: LD_EXP 54
7014: PUSH
7015: LD_INT 2
7017: ARRAY
7018: PPUSH
7019: LD_INT 13
7021: PPUSH
7022: LD_INT 0
7024: PPUSH
7025: CALL_OW 59
// enable ( 6 ) ;
7029: LD_INT 6
7031: ENABLE_MARKED
// end ; if not def_artefact_three then
7032: LD_EXP 27
7036: NOT
7037: IFFALSE 7064
// begin CreateResourcesArea ( mat_artefact , artefact_size [ 3 ] , artefact_area , false ) ;
7039: LD_INT 4
7041: PPUSH
7042: LD_EXP 54
7046: PUSH
7047: LD_INT 3
7049: ARRAY
7050: PPUSH
7051: LD_INT 13
7053: PPUSH
7054: LD_INT 0
7056: PPUSH
7057: CALL_OW 59
// enable ( 7 ) ;
7061: LD_INT 7
7063: ENABLE_MARKED
// end ; end ; end_of_file
7064: LD_VAR 0 6
7068: RET
// on ArtifactUnloaded ( un , size ) do var art , base ;
7069: LD_INT 0
7071: PPUSH
7072: PPUSH
// begin art := artefact_num [ size ] ;
7073: LD_ADDR_VAR 0 3
7077: PUSH
7078: LD_EXP 53
7082: PUSH
7083: LD_VAR 0 2
7087: ARRAY
7088: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
7089: LD_ADDR_VAR 0 4
7093: PUSH
7094: LD_VAR 0 3
7098: PUSH
7099: LD_INT 1
7101: MINUS
7102: PUSH
7103: LD_INT 100
7105: MUL
7106: ST_TO_ADDR
// SetTag ( base + 09 , false ) ;
7107: LD_VAR 0 4
7111: PUSH
7112: LD_INT 9
7114: PLUS
7115: PPUSH
7116: LD_INT 0
7118: PPUSH
7119: CALL_OW 109
// SetTag ( base + 13 , false ) ;
7123: LD_VAR 0 4
7127: PUSH
7128: LD_INT 13
7130: PLUS
7131: PPUSH
7132: LD_INT 0
7134: PPUSH
7135: CALL_OW 109
// Init_Lab ( art ) ;
7139: LD_VAR 0 3
7143: PPUSH
7144: CALL 8620 0 1
// end ;
7148: PPOPN 4
7150: END
// on ArtifactLoaded ( un , size ) do var art , base , side ;
7151: LD_INT 0
7153: PPUSH
7154: PPUSH
7155: PPUSH
// begin art := artefact_num [ size ] ;
7156: LD_ADDR_VAR 0 3
7160: PUSH
7161: LD_EXP 53
7165: PUSH
7166: LD_VAR 0 2
7170: ARRAY
7171: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
7172: LD_ADDR_VAR 0 4
7176: PUSH
7177: LD_VAR 0 3
7181: PUSH
7182: LD_INT 1
7184: MINUS
7185: PUSH
7186: LD_INT 100
7188: MUL
7189: ST_TO_ADDR
// SetTag ( base + 09 , true ) ;
7190: LD_VAR 0 4
7194: PUSH
7195: LD_INT 9
7197: PLUS
7198: PPUSH
7199: LD_INT 1
7201: PPUSH
7202: CALL_OW 109
// SetTag ( base + 13 , un ) ;
7206: LD_VAR 0 4
7210: PUSH
7211: LD_INT 13
7213: PLUS
7214: PPUSH
7215: LD_VAR 0 1
7219: PPUSH
7220: CALL_OW 109
// if GetTag ( base + 11 ) then
7224: LD_VAR 0 4
7228: PUSH
7229: LD_INT 11
7231: PLUS
7232: PPUSH
7233: CALL_OW 110
7237: IFFALSE 7400
// begin side := GetSide ( GetTag ( base + 11 ) ) ;
7239: LD_ADDR_VAR 0 5
7243: PUSH
7244: LD_VAR 0 4
7248: PUSH
7249: LD_INT 11
7251: PLUS
7252: PPUSH
7253: CALL_OW 110
7257: PPUSH
7258: CALL_OW 255
7262: ST_TO_ADDR
// if GetTag ( base + 12 ) then
7263: LD_VAR 0 4
7267: PUSH
7268: LD_INT 12
7270: PLUS
7271: PPUSH
7272: CALL_OW 110
7276: IFFALSE 7344
// begin ComCancel ( GetTag ( base + 11 ) ) ;
7278: LD_VAR 0 4
7282: PUSH
7283: LD_INT 11
7285: PLUS
7286: PPUSH
7287: CALL_OW 110
7291: PPUSH
7292: CALL_OW 127
// wait ( 5 ) ;
7296: LD_INT 5
7298: PPUSH
7299: CALL_OW 67
// labs_in_use := labs_in_use diff GetTag ( base + 11 ) ;
7303: LD_ADDR_EXP 55
7307: PUSH
7308: LD_EXP 55
7312: PUSH
7313: LD_VAR 0 4
7317: PUSH
7318: LD_INT 11
7320: PLUS
7321: PPUSH
7322: CALL_OW 110
7326: DIFF
7327: ST_TO_ADDR
// SetTag ( base + 12 , false ) ;
7328: LD_VAR 0 4
7332: PUSH
7333: LD_INT 12
7335: PLUS
7336: PPUSH
7337: LD_INT 0
7339: PPUSH
7340: CALL_OW 109
// end ; if not GetTag ( base + side * 10 + 11 ) then
7344: LD_VAR 0 4
7348: PUSH
7349: LD_VAR 0 5
7353: PUSH
7354: LD_INT 10
7356: MUL
7357: PLUS
7358: PUSH
7359: LD_INT 11
7361: PLUS
7362: PPUSH
7363: CALL_OW 110
7367: NOT
7368: IFFALSE 7384
// DeInit_Lab ( side , art ) ;
7370: LD_VAR 0 5
7374: PPUSH
7375: LD_VAR 0 3
7379: PPUSH
7380: CALL 9156 0 2
// SetTag ( base + 11 , 0 ) ;
7384: LD_VAR 0 4
7388: PUSH
7389: LD_INT 11
7391: PLUS
7392: PPUSH
7393: LD_INT 0
7395: PPUSH
7396: CALL_OW 109
// end ; end ;
7400: PPOPN 5
7402: END
// on ArtifactResearchComplete ( lab ) do var un , side ;
7403: LD_INT 0
7405: PPUSH
7406: PPUSH
// begin side := GetSide ( lab ) - 1 ;
7407: LD_ADDR_VAR 0 3
7411: PUSH
7412: LD_VAR 0 1
7416: PPUSH
7417: CALL_OW 255
7421: PUSH
7422: LD_INT 1
7424: MINUS
7425: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
7426: LD_ADDR_VAR 0 2
7430: PUSH
7431: DOUBLE
7432: LD_INT 0
7434: DEC
7435: ST_TO_ADDR
7436: LD_EXP 52
7440: PUSH
7441: LD_INT 1
7443: MINUS
7444: PUSH
7445: FOR_TO
7446: IFFALSE 7488
// if lab = GetTag ( un * 100 + 11 ) then
7448: LD_VAR 0 1
7452: PUSH
7453: LD_VAR 0 2
7457: PUSH
7458: LD_INT 100
7460: MUL
7461: PUSH
7462: LD_INT 11
7464: PLUS
7465: PPUSH
7466: CALL_OW 110
7470: EQUAL
7471: IFFALSE 7486
// Init_Lab ( un + 1 ) ;
7473: LD_VAR 0 2
7477: PUSH
7478: LD_INT 1
7480: PLUS
7481: PPUSH
7482: CALL 8620 0 1
7486: GO 7445
7488: POP
7489: POP
// end ;
7490: PPOPN 3
7492: END
// on SpecResearchCancel ( lab , progress ) do var un , side ;
7493: LD_INT 0
7495: PPUSH
7496: PPUSH
// begin side := GetSide ( lab ) - 1 ;
7497: LD_ADDR_VAR 0 4
7501: PUSH
7502: LD_VAR 0 1
7506: PPUSH
7507: CALL_OW 255
7511: PUSH
7512: LD_INT 1
7514: MINUS
7515: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
7516: LD_ADDR_VAR 0 3
7520: PUSH
7521: DOUBLE
7522: LD_INT 0
7524: DEC
7525: ST_TO_ADDR
7526: LD_EXP 52
7530: PUSH
7531: LD_INT 1
7533: MINUS
7534: PUSH
7535: FOR_TO
7536: IFFALSE 7654
// if ( GetTag ( un * 100 + 11 ) = lab ) and GetTag ( un * 100 + 12 ) then
7538: LD_VAR 0 3
7542: PUSH
7543: LD_INT 100
7545: MUL
7546: PUSH
7547: LD_INT 11
7549: PLUS
7550: PPUSH
7551: CALL_OW 110
7555: PUSH
7556: LD_VAR 0 1
7560: EQUAL
7561: PUSH
7562: LD_VAR 0 3
7566: PUSH
7567: LD_INT 100
7569: MUL
7570: PUSH
7571: LD_INT 12
7573: PLUS
7574: PPUSH
7575: CALL_OW 110
7579: AND
7580: IFFALSE 7652
// begin SetTag ( un * 100 + side * 10 + 22 , progress ) ;
7582: LD_VAR 0 3
7586: PUSH
7587: LD_INT 100
7589: MUL
7590: PUSH
7591: LD_VAR 0 4
7595: PUSH
7596: LD_INT 10
7598: MUL
7599: PLUS
7600: PUSH
7601: LD_INT 22
7603: PLUS
7604: PPUSH
7605: LD_VAR 0 2
7609: PPUSH
7610: CALL_OW 109
// SetTag ( un * 100 + 12 , false ) ;
7614: LD_VAR 0 3
7618: PUSH
7619: LD_INT 100
7621: MUL
7622: PUSH
7623: LD_INT 12
7625: PLUS
7626: PPUSH
7627: LD_INT 0
7629: PPUSH
7630: CALL_OW 109
// labs_in_use := labs_in_use diff lab ;
7634: LD_ADDR_EXP 55
7638: PUSH
7639: LD_EXP 55
7643: PUSH
7644: LD_VAR 0 1
7648: DIFF
7649: ST_TO_ADDR
// break ;
7650: GO 7654
// end ;
7652: GO 7535
7654: POP
7655: POP
// Update_Artefact ( lab ) ;
7656: LD_VAR 0 1
7660: PPUSH
7661: CALL 9295 0 1
// end ;
7665: PPOPN 4
7667: END
// on SpecResearchComplete ( lab ) do var un , side ;
7668: LD_INT 0
7670: PPUSH
7671: PPUSH
// begin side := GetSide ( lab ) - 1 ;
7672: LD_ADDR_VAR 0 3
7676: PUSH
7677: LD_VAR 0 1
7681: PPUSH
7682: CALL_OW 255
7686: PUSH
7687: LD_INT 1
7689: MINUS
7690: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
7691: LD_ADDR_VAR 0 2
7695: PUSH
7696: DOUBLE
7697: LD_INT 0
7699: DEC
7700: ST_TO_ADDR
7701: LD_EXP 52
7705: PUSH
7706: LD_INT 1
7708: MINUS
7709: PUSH
7710: FOR_TO
7711: IFFALSE 7857
// if ( GetTag ( un * 100 + 11 ) = lab ) and GetTag ( un * 100 + 12 ) then
7713: LD_VAR 0 2
7717: PUSH
7718: LD_INT 100
7720: MUL
7721: PUSH
7722: LD_INT 11
7724: PLUS
7725: PPUSH
7726: CALL_OW 110
7730: PUSH
7731: LD_VAR 0 1
7735: EQUAL
7736: PUSH
7737: LD_VAR 0 2
7741: PUSH
7742: LD_INT 100
7744: MUL
7745: PUSH
7746: LD_INT 12
7748: PLUS
7749: PPUSH
7750: CALL_OW 110
7754: AND
7755: IFFALSE 7855
// begin SetTag ( un * 100 + 12 , false ) ;
7757: LD_VAR 0 2
7761: PUSH
7762: LD_INT 100
7764: MUL
7765: PUSH
7766: LD_INT 12
7768: PLUS
7769: PPUSH
7770: LD_INT 0
7772: PPUSH
7773: CALL_OW 109
// SetTag ( un * 100 + side * 10 + 21 , true ) ;
7777: LD_VAR 0 2
7781: PUSH
7782: LD_INT 100
7784: MUL
7785: PUSH
7786: LD_VAR 0 3
7790: PUSH
7791: LD_INT 10
7793: MUL
7794: PLUS
7795: PUSH
7796: LD_INT 21
7798: PLUS
7799: PPUSH
7800: LD_INT 1
7802: PPUSH
7803: CALL_OW 109
// SetTag ( un * 100 + side * 10 + 25 , lab ) ;
7807: LD_VAR 0 2
7811: PUSH
7812: LD_INT 100
7814: MUL
7815: PUSH
7816: LD_VAR 0 3
7820: PUSH
7821: LD_INT 10
7823: MUL
7824: PLUS
7825: PUSH
7826: LD_INT 25
7828: PLUS
7829: PPUSH
7830: LD_VAR 0 1
7834: PPUSH
7835: CALL_OW 109
// labs_in_use := labs_in_use diff lab ;
7839: LD_ADDR_EXP 55
7843: PUSH
7844: LD_EXP 55
7848: PUSH
7849: LD_VAR 0 1
7853: DIFF
7854: ST_TO_ADDR
// end ;
7855: GO 7710
7857: POP
7858: POP
// Update_Artefact ( lab ) ;
7859: LD_VAR 0 1
7863: PPUSH
7864: CALL 9295 0 1
// end ;
7868: PPOPN 3
7870: END
// on ArtifactUsed ( side , number , p1 , p2 ) do var un , succes , art , base ;
7871: LD_INT 0
7873: PPUSH
7874: PPUSH
7875: PPUSH
7876: PPUSH
// begin art := ( ( number - 1 ) mod 3 ) + 1 ;
7877: LD_ADDR_VAR 0 7
7881: PUSH
7882: LD_VAR 0 2
7886: PUSH
7887: LD_INT 1
7889: MINUS
7890: PUSH
7891: LD_INT 3
7893: MOD
7894: PUSH
7895: LD_INT 1
7897: PLUS
7898: ST_TO_ADDR
// base := ( art - 1 ) * 100 ;
7899: LD_ADDR_VAR 0 8
7903: PUSH
7904: LD_VAR 0 7
7908: PUSH
7909: LD_INT 1
7911: MINUS
7912: PUSH
7913: LD_INT 100
7915: MUL
7916: ST_TO_ADDR
// if number <= 3 then
7917: LD_VAR 0 2
7921: PUSH
7922: LD_INT 3
7924: LESSEQUAL
7925: IFFALSE 8157
// begin SetSpecResearch ( GetTag ( base + 11 ) , GetTag ( base + 05 ) , true ) ;
7927: LD_VAR 0 8
7931: PUSH
7932: LD_INT 11
7934: PLUS
7935: PPUSH
7936: CALL_OW 110
7940: PPUSH
7941: LD_VAR 0 8
7945: PUSH
7946: LD_INT 5
7948: PLUS
7949: PPUSH
7950: CALL_OW 110
7954: PPUSH
7955: LD_INT 1
7957: PPUSH
7958: CALL_OW 486
// SetWorkingProgress ( GetTag ( base + 11 ) , GetTag ( base + side * 10 + 12 ) ) ;
7962: LD_VAR 0 8
7966: PUSH
7967: LD_INT 11
7969: PLUS
7970: PPUSH
7971: CALL_OW 110
7975: PPUSH
7976: LD_VAR 0 8
7980: PUSH
7981: LD_VAR 0 1
7985: PUSH
7986: LD_INT 10
7988: MUL
7989: PLUS
7990: PUSH
7991: LD_INT 12
7993: PLUS
7994: PPUSH
7995: CALL_OW 110
7999: PPUSH
8000: CALL_OW 329
// SetTag ( base + 12 , true ) ;
8004: LD_VAR 0 8
8008: PUSH
8009: LD_INT 12
8011: PLUS
8012: PPUSH
8013: LD_INT 1
8015: PPUSH
8016: CALL_OW 109
// labs_in_use := labs_in_use ^ GetTag ( base + 11 ) ;
8020: LD_ADDR_EXP 55
8024: PUSH
8025: LD_EXP 55
8029: PUSH
8030: LD_VAR 0 8
8034: PUSH
8035: LD_INT 11
8037: PLUS
8038: PPUSH
8039: CALL_OW 110
8043: ADD
8044: ST_TO_ADDR
// for un = 0 to ( artefact_number - 1 ) do
8045: LD_ADDR_VAR 0 5
8049: PUSH
8050: DOUBLE
8051: LD_INT 0
8053: DEC
8054: ST_TO_ADDR
8055: LD_EXP 52
8059: PUSH
8060: LD_INT 1
8062: MINUS
8063: PUSH
8064: FOR_TO
8065: IFFALSE 8153
// if GetTag ( base + 11 ) in [ GetTag ( un * 100 + 11 ) , GetTag ( un * 100 + side * 10 + 15 ) ] then
8067: LD_VAR 0 8
8071: PUSH
8072: LD_INT 11
8074: PLUS
8075: PPUSH
8076: CALL_OW 110
8080: PUSH
8081: LD_VAR 0 5
8085: PUSH
8086: LD_INT 100
8088: MUL
8089: PUSH
8090: LD_INT 11
8092: PLUS
8093: PPUSH
8094: CALL_OW 110
8098: PUSH
8099: LD_VAR 0 5
8103: PUSH
8104: LD_INT 100
8106: MUL
8107: PUSH
8108: LD_VAR 0 1
8112: PUSH
8113: LD_INT 10
8115: MUL
8116: PLUS
8117: PUSH
8118: LD_INT 15
8120: PLUS
8121: PPUSH
8122: CALL_OW 110
8126: PUSH
8127: EMPTY
8128: LIST
8129: LIST
8130: IN
8131: IFFALSE 8151
// DeInit_Lab ( side , un + 1 ) ;
8133: LD_VAR 0 1
8137: PPUSH
8138: LD_VAR 0 5
8142: PUSH
8143: LD_INT 1
8145: PLUS
8146: PPUSH
8147: CALL 9156 0 2
8151: GO 8064
8153: POP
8154: POP
// end else
8155: GO 8331
// begin succes := false ;
8157: LD_ADDR_VAR 0 6
8161: PUSH
8162: LD_INT 0
8164: ST_TO_ADDR
// case art of 1 :
8165: LD_VAR 0 7
8169: PUSH
8170: LD_INT 1
8172: DOUBLE
8173: EQUAL
8174: IFTRUE 8178
8176: GO 8206
8178: POP
// succes := Show_me_map ( side , p1 , p2 ) ; 2 :
8179: LD_ADDR_VAR 0 6
8183: PUSH
8184: LD_VAR 0 1
8188: PPUSH
8189: LD_VAR 0 3
8193: PPUSH
8194: LD_VAR 0 4
8198: PPUSH
8199: CALL 9495 0 3
8203: ST_TO_ADDR
8204: GO 8274
8206: LD_INT 2
8208: DOUBLE
8209: EQUAL
8210: IFTRUE 8214
8212: GO 8237
8214: POP
// succes := Destroy_siberite ( side , p1 ) ; 3 :
8215: LD_ADDR_VAR 0 6
8219: PUSH
8220: LD_VAR 0 1
8224: PPUSH
8225: LD_VAR 0 3
8229: PPUSH
8230: CALL 9733 0 2
8234: ST_TO_ADDR
8235: GO 8274
8237: LD_INT 3
8239: DOUBLE
8240: EQUAL
8241: IFTRUE 8245
8243: GO 8273
8245: POP
// succes := Contamine ( side , p1 , p2 ) ; end ;
8246: LD_ADDR_VAR 0 6
8250: PUSH
8251: LD_VAR 0 1
8255: PPUSH
8256: LD_VAR 0 3
8260: PPUSH
8261: LD_VAR 0 4
8265: PPUSH
8266: CALL 10129 0 3
8270: ST_TO_ADDR
8271: GO 8274
8273: POP
// if succes then
8274: LD_VAR 0 6
8278: IFFALSE 8331
// begin SetTag ( base + side * 10 + 13 , GetTag ( base + 07 ) ) ;
8280: LD_VAR 0 8
8284: PUSH
8285: LD_VAR 0 1
8289: PUSH
8290: LD_INT 10
8292: MUL
8293: PLUS
8294: PUSH
8295: LD_INT 13
8297: PLUS
8298: PPUSH
8299: LD_VAR 0 8
8303: PUSH
8304: LD_INT 7
8306: PLUS
8307: PPUSH
8308: CALL_OW 110
8312: PPUSH
8313: CALL_OW 109
// Shadow_Artefact ( side , art ) ;
8317: LD_VAR 0 1
8321: PPUSH
8322: LD_VAR 0 7
8326: PPUSH
8327: CALL 8334 0 2
// end ; end ; end ;
8331: PPOPN 8
8333: END
// export function Shadow_Artefact ( side , art ) ; var base , lab ; begin
8334: LD_INT 0
8336: PPUSH
8337: PPUSH
8338: PPUSH
// base := ( art - 1 ) * 100 ;
8339: LD_ADDR_VAR 0 4
8343: PUSH
8344: LD_VAR 0 2
8348: PUSH
8349: LD_INT 1
8351: MINUS
8352: PUSH
8353: LD_INT 100
8355: MUL
8356: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
8357: LD_ADDR_VAR 0 5
8361: PUSH
8362: LD_VAR 0 4
8366: PUSH
8367: LD_VAR 0 1
8371: PUSH
8372: LD_INT 10
8374: MUL
8375: PLUS
8376: PUSH
8377: LD_INT 15
8379: PLUS
8380: PPUSH
8381: CALL_OW 110
8385: ST_TO_ADDR
// if lab and ( not lab in labs_in_use ) then
8386: LD_VAR 0 5
8390: PUSH
8391: LD_VAR 0 5
8395: PUSH
8396: LD_EXP 55
8400: IN
8401: NOT
8402: AND
8403: IFFALSE 8461
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , art_gray , lab ) ;
8405: LD_VAR 0 1
8409: PPUSH
8410: LD_VAR 0 4
8414: PUSH
8415: LD_INT 1
8417: PLUS
8418: PUSH
8419: LD_VAR 0 4
8423: PUSH
8424: LD_VAR 0 1
8428: PUSH
8429: LD_INT 10
8431: MUL
8432: PLUS
8433: PUSH
8434: LD_INT 11
8436: PLUS
8437: PPUSH
8438: CALL_OW 110
8442: PLUS
8443: PPUSH
8444: CALL_OW 110
8448: PPUSH
8449: LD_INT 1
8451: PPUSH
8452: LD_VAR 0 5
8456: PPUSH
8457: CALL_OW 468
// end ;
8461: LD_VAR 0 3
8465: RET
// export function Highlight_Artefact ( side , art ) ; var base , lab ; begin
8466: LD_INT 0
8468: PPUSH
8469: PPUSH
8470: PPUSH
// base := ( art - 1 ) * 100 ;
8471: LD_ADDR_VAR 0 4
8475: PUSH
8476: LD_VAR 0 2
8480: PUSH
8481: LD_INT 1
8483: MINUS
8484: PUSH
8485: LD_INT 100
8487: MUL
8488: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
8489: LD_ADDR_VAR 0 5
8493: PUSH
8494: LD_VAR 0 4
8498: PUSH
8499: LD_VAR 0 1
8503: PUSH
8504: LD_INT 10
8506: MUL
8507: PLUS
8508: PUSH
8509: LD_INT 15
8511: PLUS
8512: PPUSH
8513: CALL_OW 110
8517: ST_TO_ADDR
// if lab and ( not lab in labs_in_use ) and UnitsInside ( lab ) then
8518: LD_VAR 0 5
8522: PUSH
8523: LD_VAR 0 5
8527: PUSH
8528: LD_EXP 55
8532: IN
8533: NOT
8534: AND
8535: PUSH
8536: LD_VAR 0 5
8540: PPUSH
8541: CALL_OW 313
8545: AND
8546: IFFALSE 8615
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , GetTag ( base + 03 ) , lab ) ;
8548: LD_VAR 0 1
8552: PPUSH
8553: LD_VAR 0 4
8557: PUSH
8558: LD_INT 1
8560: PLUS
8561: PUSH
8562: LD_VAR 0 4
8566: PUSH
8567: LD_VAR 0 1
8571: PUSH
8572: LD_INT 10
8574: MUL
8575: PLUS
8576: PUSH
8577: LD_INT 11
8579: PLUS
8580: PPUSH
8581: CALL_OW 110
8585: PLUS
8586: PPUSH
8587: CALL_OW 110
8591: PPUSH
8592: LD_VAR 0 4
8596: PUSH
8597: LD_INT 3
8599: PLUS
8600: PPUSH
8601: CALL_OW 110
8605: PPUSH
8606: LD_VAR 0 5
8610: PPUSH
8611: CALL_OW 468
// end ;
8615: LD_VAR 0 3
8619: RET
// export function Init_Lab ( art ) ; var list , side , base , dist , state , art_hex , nearest_lab ; begin
8620: LD_INT 0
8622: PPUSH
8623: PPUSH
8624: PPUSH
8625: PPUSH
8626: PPUSH
8627: PPUSH
8628: PPUSH
8629: PPUSH
// art_hex := FindArtifact ( artefact_size [ art ] ) ;
8630: LD_ADDR_VAR 0 8
8634: PUSH
8635: LD_EXP 54
8639: PUSH
8640: LD_VAR 0 1
8644: ARRAY
8645: PPUSH
8646: CALL_OW 469
8650: ST_TO_ADDR
// if not art_hex then
8651: LD_VAR 0 8
8655: NOT
8656: IFFALSE 8660
// exit ;
8658: GO 9151
// list := FilterAllUnits ( [ [ f_or , [ f_btype , b_lab ] , [ f_btype , b_lab_half ] , [ f_btype , b_lab_full ] ] ] ) ;
8660: LD_ADDR_VAR 0 3
8664: PUSH
8665: LD_INT 2
8667: PUSH
8668: LD_INT 30
8670: PUSH
8671: LD_INT 6
8673: PUSH
8674: EMPTY
8675: LIST
8676: LIST
8677: PUSH
8678: LD_INT 30
8680: PUSH
8681: LD_INT 7
8683: PUSH
8684: EMPTY
8685: LIST
8686: LIST
8687: PUSH
8688: LD_INT 30
8690: PUSH
8691: LD_INT 8
8693: PUSH
8694: EMPTY
8695: LIST
8696: LIST
8697: PUSH
8698: EMPTY
8699: LIST
8700: LIST
8701: LIST
8702: LIST
8703: PUSH
8704: EMPTY
8705: LIST
8706: PPUSH
8707: CALL_OW 69
8711: ST_TO_ADDR
// nearest_lab := NearestUnitToXY ( list , art_hex [ 1 ] , art_hex [ 2 ] ) ;
8712: LD_ADDR_VAR 0 9
8716: PUSH
8717: LD_VAR 0 3
8721: PPUSH
8722: LD_VAR 0 8
8726: PUSH
8727: LD_INT 1
8729: ARRAY
8730: PPUSH
8731: LD_VAR 0 8
8735: PUSH
8736: LD_INT 2
8738: ARRAY
8739: PPUSH
8740: CALL_OW 73
8744: ST_TO_ADDR
// dist := GetDistUnitXY ( nearest_lab , art_hex [ 1 ] , art_hex [ 2 ] ) ;
8745: LD_ADDR_VAR 0 6
8749: PUSH
8750: LD_VAR 0 9
8754: PPUSH
8755: LD_VAR 0 8
8759: PUSH
8760: LD_INT 1
8762: ARRAY
8763: PPUSH
8764: LD_VAR 0 8
8768: PUSH
8769: LD_INT 2
8771: ARRAY
8772: PPUSH
8773: CALL_OW 297
8777: ST_TO_ADDR
// if dist < 9 then
8778: LD_VAR 0 6
8782: PUSH
8783: LD_INT 9
8785: LESS
8786: IFFALSE 9151
// begin side := GetSide ( nearest_lab ) ;
8788: LD_ADDR_VAR 0 4
8792: PUSH
8793: LD_VAR 0 9
8797: PPUSH
8798: CALL_OW 255
8802: ST_TO_ADDR
// DeInit_Lab ( side , art ) ;
8803: LD_VAR 0 4
8807: PPUSH
8808: LD_VAR 0 1
8812: PPUSH
8813: CALL 9156 0 2
// base := ( art - 1 ) * 100 ;
8817: LD_ADDR_VAR 0 5
8821: PUSH
8822: LD_VAR 0 1
8826: PUSH
8827: LD_INT 1
8829: MINUS
8830: PUSH
8831: LD_INT 100
8833: MUL
8834: ST_TO_ADDR
// if ( GetTech ( tech_Artifact , side ) = state_researched ) and ( UnitsInside ( nearest_lab ) ) then
8835: LD_INT 24
8837: PPUSH
8838: LD_VAR 0 4
8842: PPUSH
8843: CALL_OW 321
8847: PUSH
8848: LD_INT 2
8850: EQUAL
8851: PUSH
8852: LD_VAR 0 9
8856: PPUSH
8857: CALL_OW 313
8861: AND
8862: IFFALSE 9054
// begin if GetTag ( base + side * 10 + 11 ) then
8864: LD_VAR 0 5
8868: PUSH
8869: LD_VAR 0 4
8873: PUSH
8874: LD_INT 10
8876: MUL
8877: PLUS
8878: PUSH
8879: LD_INT 11
8881: PLUS
8882: PPUSH
8883: CALL_OW 110
8887: IFFALSE 9044
// begin if not GetTag ( base + side * 10 + 13 ) then
8889: LD_VAR 0 5
8893: PUSH
8894: LD_VAR 0 4
8898: PUSH
8899: LD_INT 10
8901: MUL
8902: PLUS
8903: PUSH
8904: LD_INT 13
8906: PLUS
8907: PPUSH
8908: CALL_OW 110
8912: NOT
8913: IFFALSE 8936
// state := GetTag ( base + 03 ) else
8915: LD_ADDR_VAR 0 7
8919: PUSH
8920: LD_VAR 0 5
8924: PUSH
8925: LD_INT 3
8927: PLUS
8928: PPUSH
8929: CALL_OW 110
8933: ST_TO_ADDR
8934: GO 8944
// state := art_gray ;
8936: LD_ADDR_VAR 0 7
8940: PUSH
8941: LD_INT 1
8943: ST_TO_ADDR
// if GetTag ( base + side * 10 + 15 ) and ( GetTag ( base + side * 10 + 15 ) <> nearest_lab ) then
8944: LD_VAR 0 5
8948: PUSH
8949: LD_VAR 0 4
8953: PUSH
8954: LD_INT 10
8956: MUL
8957: PLUS
8958: PUSH
8959: LD_INT 15
8961: PLUS
8962: PPUSH
8963: CALL_OW 110
8967: PUSH
8968: LD_VAR 0 5
8972: PUSH
8973: LD_VAR 0 4
8977: PUSH
8978: LD_INT 10
8980: MUL
8981: PLUS
8982: PUSH
8983: LD_INT 15
8985: PLUS
8986: PPUSH
8987: CALL_OW 110
8991: PUSH
8992: LD_VAR 0 9
8996: NONEQUAL
8997: AND
8998: IFFALSE 9014
// DeInit_Lab ( side , art ) ;
9000: LD_VAR 0 4
9004: PPUSH
9005: LD_VAR 0 1
9009: PPUSH
9010: CALL 9156 0 2
// SetTag ( base + side * 10 + 15 , nearest_lab ) ;
9014: LD_VAR 0 5
9018: PUSH
9019: LD_VAR 0 4
9023: PUSH
9024: LD_INT 10
9026: MUL
9027: PLUS
9028: PUSH
9029: LD_INT 15
9031: PLUS
9032: PPUSH
9033: LD_VAR 0 9
9037: PPUSH
9038: CALL_OW 109
// end else
9042: GO 9052
// state := art_instant ;
9044: LD_ADDR_VAR 0 7
9048: PUSH
9049: LD_INT 2
9051: ST_TO_ADDR
// end else
9052: GO 9062
// state := art_gray ;
9054: LD_ADDR_VAR 0 7
9058: PUSH
9059: LD_INT 1
9061: ST_TO_ADDR
// SetTag ( base + 11 , nearest_lab ) ;
9062: LD_VAR 0 5
9066: PUSH
9067: LD_INT 11
9069: PLUS
9070: PPUSH
9071: LD_VAR 0 9
9075: PPUSH
9076: CALL_OW 109
// if not ( nearest_lab in labs_in_use ) then
9080: LD_VAR 0 9
9084: PUSH
9085: LD_EXP 55
9089: IN
9090: NOT
9091: IFFALSE 9151
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , state , nearest_lab ) ;
9093: LD_VAR 0 4
9097: PPUSH
9098: LD_VAR 0 5
9102: PUSH
9103: LD_INT 1
9105: PLUS
9106: PUSH
9107: LD_VAR 0 5
9111: PUSH
9112: LD_VAR 0 4
9116: PUSH
9117: LD_INT 10
9119: MUL
9120: PLUS
9121: PUSH
9122: LD_INT 11
9124: PLUS
9125: PPUSH
9126: CALL_OW 110
9130: PLUS
9131: PPUSH
9132: CALL_OW 110
9136: PPUSH
9137: LD_VAR 0 7
9141: PPUSH
9142: LD_VAR 0 9
9146: PPUSH
9147: CALL_OW 468
// end ; end ;
9151: LD_VAR 0 2
9155: RET
// export function DeInit_Lab ( side , art ) ; var base , lab ; begin
9156: LD_INT 0
9158: PPUSH
9159: PPUSH
9160: PPUSH
// base := ( art - 1 ) * 100 ;
9161: LD_ADDR_VAR 0 4
9165: PUSH
9166: LD_VAR 0 2
9170: PUSH
9171: LD_INT 1
9173: MINUS
9174: PUSH
9175: LD_INT 100
9177: MUL
9178: ST_TO_ADDR
// lab := GetTag ( base + side * 10 + 15 ) ;
9179: LD_ADDR_VAR 0 5
9183: PUSH
9184: LD_VAR 0 4
9188: PUSH
9189: LD_VAR 0 1
9193: PUSH
9194: LD_INT 10
9196: MUL
9197: PLUS
9198: PUSH
9199: LD_INT 15
9201: PLUS
9202: PPUSH
9203: CALL_OW 110
9207: ST_TO_ADDR
// if not lab then
9208: LD_VAR 0 5
9212: NOT
9213: IFFALSE 9234
// lab := GetTag ( base + 11 ) ;
9215: LD_ADDR_VAR 0 5
9219: PUSH
9220: LD_VAR 0 4
9224: PUSH
9225: LD_INT 11
9227: PLUS
9228: PPUSH
9229: CALL_OW 110
9233: ST_TO_ADDR
// SetArtifactUse ( side , GetTag ( base + 01 + GetTag ( base + side * 10 + 11 ) ) , art_no , lab ) ;
9234: LD_VAR 0 1
9238: PPUSH
9239: LD_VAR 0 4
9243: PUSH
9244: LD_INT 1
9246: PLUS
9247: PUSH
9248: LD_VAR 0 4
9252: PUSH
9253: LD_VAR 0 1
9257: PUSH
9258: LD_INT 10
9260: MUL
9261: PLUS
9262: PUSH
9263: LD_INT 11
9265: PLUS
9266: PPUSH
9267: CALL_OW 110
9271: PLUS
9272: PPUSH
9273: CALL_OW 110
9277: PPUSH
9278: LD_INT 0
9280: PPUSH
9281: LD_VAR 0 5
9285: PPUSH
9286: CALL_OW 468
// end ;
9290: LD_VAR 0 3
9294: RET
// export function Update_Artefact ( lab ) ; var art , side , base ; begin
9295: LD_INT 0
9297: PPUSH
9298: PPUSH
9299: PPUSH
9300: PPUSH
// side := GetSide ( lab ) ;
9301: LD_ADDR_VAR 0 4
9305: PUSH
9306: LD_VAR 0 1
9310: PPUSH
9311: CALL_OW 255
9315: ST_TO_ADDR
// for art = 1 to artefact_number do
9316: LD_ADDR_VAR 0 3
9320: PUSH
9321: DOUBLE
9322: LD_INT 1
9324: DEC
9325: ST_TO_ADDR
9326: LD_EXP 52
9330: PUSH
9331: FOR_TO
9332: IFFALSE 9488
// begin base := ( art - 1 ) * 100 ;
9334: LD_ADDR_VAR 0 5
9338: PUSH
9339: LD_VAR 0 3
9343: PUSH
9344: LD_INT 1
9346: MINUS
9347: PUSH
9348: LD_INT 100
9350: MUL
9351: ST_TO_ADDR
// if GetTag ( base + 11 ) = lab then
9352: LD_VAR 0 5
9356: PUSH
9357: LD_INT 11
9359: PLUS
9360: PPUSH
9361: CALL_OW 110
9365: PUSH
9366: LD_VAR 0 1
9370: EQUAL
9371: IFFALSE 9384
// Init_Lab ( art ) else
9373: LD_VAR 0 3
9377: PPUSH
9378: CALL 8620 0 1
9382: GO 9486
// begin if lab = GetTag ( base + side * 10 + 15 ) then
9384: LD_VAR 0 1
9388: PUSH
9389: LD_VAR 0 5
9393: PUSH
9394: LD_VAR 0 4
9398: PUSH
9399: LD_INT 10
9401: MUL
9402: PLUS
9403: PUSH
9404: LD_INT 15
9406: PLUS
9407: PPUSH
9408: CALL_OW 110
9412: EQUAL
9413: IFFALSE 9486
// begin if ( GetTag ( base + side * 10 + 13 ) > 0 ) or ( not UnitsInside ( lab ) ) then
9415: LD_VAR 0 5
9419: PUSH
9420: LD_VAR 0 4
9424: PUSH
9425: LD_INT 10
9427: MUL
9428: PLUS
9429: PUSH
9430: LD_INT 13
9432: PLUS
9433: PPUSH
9434: CALL_OW 110
9438: PUSH
9439: LD_INT 0
9441: GREATER
9442: PUSH
9443: LD_VAR 0 1
9447: PPUSH
9448: CALL_OW 313
9452: NOT
9453: OR
9454: IFFALSE 9472
// Shadow_Artefact ( side , art ) else
9456: LD_VAR 0 4
9460: PPUSH
9461: LD_VAR 0 3
9465: PPUSH
9466: CALL 8334 0 2
9470: GO 9486
// Highlight_Artefact ( side , art ) ;
9472: LD_VAR 0 4
9476: PPUSH
9477: LD_VAR 0 3
9481: PPUSH
9482: CALL 8466 0 2
// end ; end ; end ;
9486: GO 9331
9488: POP
9489: POP
// end ;
9490: LD_VAR 0 2
9494: RET
// var view_data , human_changed ; export function Show_me_map ( side , x , y ) ; var vysledek , station ; begin
9495: LD_INT 0
9497: PPUSH
9498: PPUSH
9499: PPUSH
// vysledek := true ;
9500: LD_ADDR_VAR 0 5
9504: PUSH
9505: LD_INT 1
9507: ST_TO_ADDR
// station := GetBase ( GetTag ( side * 10 + 15 ) ) ;
9508: LD_ADDR_VAR 0 6
9512: PUSH
9513: LD_VAR 0 1
9517: PUSH
9518: LD_INT 10
9520: MUL
9521: PUSH
9522: LD_INT 15
9524: PLUS
9525: PPUSH
9526: CALL_OW 110
9530: PPUSH
9531: CALL_OW 274
9535: ST_TO_ADDR
// if station and ( GetResources ( station ) [ 3 ] >= GetTag ( 06 ) ) then
9536: LD_VAR 0 6
9540: PUSH
9541: LD_VAR 0 6
9545: PPUSH
9546: CALL_OW 279
9550: PUSH
9551: LD_INT 3
9553: ARRAY
9554: PUSH
9555: LD_INT 6
9557: PPUSH
9558: CALL_OW 110
9562: GREATEREQUAL
9563: AND
9564: IFFALSE 9654
// begin PlaceSeeing ( x , y , side , - 15 ) ;
9566: LD_VAR 0 2
9570: PPUSH
9571: LD_VAR 0 3
9575: PPUSH
9576: LD_VAR 0 1
9580: PPUSH
9581: LD_INT 15
9583: NEG
9584: PPUSH
9585: CALL_OW 330
// SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 06 ) ) ;
9589: LD_VAR 0 6
9593: PPUSH
9594: LD_INT 3
9596: PPUSH
9597: LD_VAR 0 6
9601: PPUSH
9602: CALL_OW 279
9606: PUSH
9607: LD_INT 3
9609: ARRAY
9610: PUSH
9611: LD_INT 6
9613: PPUSH
9614: CALL_OW 110
9618: MINUS
9619: PPUSH
9620: CALL_OW 277
// view_data := [ x , y , side ] ;
9624: LD_ADDR_LOC 9
9628: PUSH
9629: LD_VAR 0 2
9633: PUSH
9634: LD_VAR 0 3
9638: PUSH
9639: LD_VAR 0 1
9643: PUSH
9644: EMPTY
9645: LIST
9646: LIST
9647: LIST
9648: ST_TO_ADDR
// enable ( 1 ) ;
9649: LD_INT 1
9651: ENABLE_MARKED
// end else
9652: GO 9662
// vysledek := false ;
9654: LD_ADDR_VAR 0 5
9658: PUSH
9659: LD_INT 0
9661: ST_TO_ADDR
// result := vysledek ;
9662: LD_ADDR_VAR 0 4
9666: PUSH
9667: LD_VAR 0 5
9671: ST_TO_ADDR
// end ;
9672: LD_VAR 0 4
9676: RET
// every 0 0$2 trigger view_data marked 1 do
9677: LD_LOC 9
9681: IFFALSE 9732
9683: GO 9685
9685: DISABLE
// begin wait ( 0 0$30 ) ;
9686: LD_INT 1050
9688: PPUSH
9689: CALL_OW 67
// RemoveSeeing ( view_data [ 1 ] , view_data [ 2 ] , view_data [ 3 ] ) ;
9693: LD_LOC 9
9697: PUSH
9698: LD_INT 1
9700: ARRAY
9701: PPUSH
9702: LD_LOC 9
9706: PUSH
9707: LD_INT 2
9709: ARRAY
9710: PPUSH
9711: LD_LOC 9
9715: PUSH
9716: LD_INT 3
9718: ARRAY
9719: PPUSH
9720: CALL_OW 331
// view_data := 0 ;
9724: LD_ADDR_LOC 9
9728: PUSH
9729: LD_INT 0
9731: ST_TO_ADDR
// end ;
9732: END
// export function Destroy_siberite ( side , un ) ; var vysledek , station , v_can , b_can , it_can , building_list , vehicle_list ; begin
9733: LD_INT 0
9735: PPUSH
9736: PPUSH
9737: PPUSH
9738: PPUSH
9739: PPUSH
9740: PPUSH
9741: PPUSH
9742: PPUSH
// vysledek := true ;
9743: LD_ADDR_VAR 0 4
9747: PUSH
9748: LD_INT 1
9750: ST_TO_ADDR
// it_can := false ;
9751: LD_ADDR_VAR 0 8
9755: PUSH
9756: LD_INT 0
9758: ST_TO_ADDR
// building_list := [ b_siberite_mine , b_siberite_power ] ;
9759: LD_ADDR_VAR 0 9
9763: PUSH
9764: LD_INT 30
9766: PUSH
9767: LD_INT 28
9769: PUSH
9770: EMPTY
9771: LIST
9772: LIST
9773: ST_TO_ADDR
// vehicle_list := [ us_siberium_rocket , ru_siberium_rocket , ar_selfpropelled_bomb , ru_time_lapser , us_double_laser ] ;
9774: LD_ADDR_VAR 0 10
9778: PUSH
9779: LD_INT 8
9781: PUSH
9782: LD_INT 48
9784: PUSH
9785: LD_INT 29
9787: PUSH
9788: LD_INT 49
9790: PUSH
9791: LD_INT 10
9793: PUSH
9794: EMPTY
9795: LIST
9796: LIST
9797: LIST
9798: LIST
9799: LIST
9800: ST_TO_ADDR
// b_can := ( GetType ( un ) = unit_building ) and ( ( GetBType ( un ) in building_list ) or ( GetBWeapon ( un ) in vehicle_list ) ) ;
9801: LD_ADDR_VAR 0 7
9805: PUSH
9806: LD_VAR 0 2
9810: PPUSH
9811: CALL_OW 247
9815: PUSH
9816: LD_INT 3
9818: EQUAL
9819: PUSH
9820: LD_VAR 0 2
9824: PPUSH
9825: CALL_OW 266
9829: PUSH
9830: LD_VAR 0 9
9834: IN
9835: PUSH
9836: LD_VAR 0 2
9840: PPUSH
9841: CALL_OW 269
9845: PUSH
9846: LD_VAR 0 10
9850: IN
9851: OR
9852: AND
9853: ST_TO_ADDR
// v_can := ( GetType ( un ) = unit_vehicle ) and ( ( GetWeapon ( un ) in vehicle_list ) or ( GetEngine ( un ) = engine_siberite ) ) ;
9854: LD_ADDR_VAR 0 6
9858: PUSH
9859: LD_VAR 0 2
9863: PPUSH
9864: CALL_OW 247
9868: PUSH
9869: LD_INT 2
9871: EQUAL
9872: PUSH
9873: LD_VAR 0 2
9877: PPUSH
9878: CALL_OW 264
9882: PUSH
9883: LD_VAR 0 10
9887: IN
9888: PUSH
9889: LD_VAR 0 2
9893: PPUSH
9894: CALL_OW 262
9898: PUSH
9899: LD_INT 3
9901: EQUAL
9902: OR
9903: AND
9904: ST_TO_ADDR
// case def_artefact_two_using of 0 :
9905: LD_EXP 28
9909: PUSH
9910: LD_INT 0
9912: DOUBLE
9913: EQUAL
9914: IFTRUE 9918
9916: GO 9935
9918: POP
// if b_can then
9919: LD_VAR 0 7
9923: IFFALSE 9933
// it_can := true ; 1 :
9925: LD_ADDR_VAR 0 8
9929: PUSH
9930: LD_INT 1
9932: ST_TO_ADDR
9933: GO 9992
9935: LD_INT 1
9937: DOUBLE
9938: EQUAL
9939: IFTRUE 9943
9941: GO 9960
9943: POP
// if v_can then
9944: LD_VAR 0 6
9948: IFFALSE 9958
// it_can := true ; 2 :
9950: LD_ADDR_VAR 0 8
9954: PUSH
9955: LD_INT 1
9957: ST_TO_ADDR
9958: GO 9992
9960: LD_INT 2
9962: DOUBLE
9963: EQUAL
9964: IFTRUE 9968
9966: GO 9991
9968: POP
// if b_can or v_can then
9969: LD_VAR 0 7
9973: PUSH
9974: LD_VAR 0 6
9978: OR
9979: IFFALSE 9989
// it_can := true ; end ;
9981: LD_ADDR_VAR 0 8
9985: PUSH
9986: LD_INT 1
9988: ST_TO_ADDR
9989: GO 9992
9991: POP
// station := GetBase ( GetTag ( 100 + side * 10 + 15 ) ) ;
9992: LD_ADDR_VAR 0 5
9996: PUSH
9997: LD_INT 100
9999: PUSH
10000: LD_VAR 0 1
10004: PUSH
10005: LD_INT 10
10007: MUL
10008: PLUS
10009: PUSH
10010: LD_INT 15
10012: PLUS
10013: PPUSH
10014: CALL_OW 110
10018: PPUSH
10019: CALL_OW 274
10023: ST_TO_ADDR
// if station and it_can and ( GetResources ( station ) [ 3 ] >= GetTag ( 106 ) ) then
10024: LD_VAR 0 5
10028: PUSH
10029: LD_VAR 0 8
10033: AND
10034: PUSH
10035: LD_VAR 0 5
10039: PPUSH
10040: CALL_OW 279
10044: PUSH
10045: LD_INT 3
10047: ARRAY
10048: PUSH
10049: LD_INT 106
10051: PPUSH
10052: CALL_OW 110
10056: GREATEREQUAL
10057: AND
10058: IFFALSE 10106
// begin KillUnit ( un ) ;
10060: LD_VAR 0 2
10064: PPUSH
10065: CALL_OW 66
// SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 106 ) ) ;
10069: LD_VAR 0 5
10073: PPUSH
10074: LD_INT 3
10076: PPUSH
10077: LD_VAR 0 5
10081: PPUSH
10082: CALL_OW 279
10086: PUSH
10087: LD_INT 3
10089: ARRAY
10090: PUSH
10091: LD_INT 106
10093: PPUSH
10094: CALL_OW 110
10098: MINUS
10099: PPUSH
10100: CALL_OW 277
// end else
10104: GO 10114
// vysledek := false ;
10106: LD_ADDR_VAR 0 4
10110: PUSH
10111: LD_INT 0
10113: ST_TO_ADDR
// result := vysledek ;
10114: LD_ADDR_VAR 0 3
10118: PUSH
10119: LD_VAR 0 4
10123: ST_TO_ADDR
// end ;
10124: LD_VAR 0 3
10128: RET
// export function Contamine ( side , p1 , p2 ) ; var vysledek , old_side , station ; begin
10129: LD_INT 0
10131: PPUSH
10132: PPUSH
10133: PPUSH
10134: PPUSH
// vysledek := true ;
10135: LD_ADDR_VAR 0 5
10139: PUSH
10140: LD_INT 1
10142: ST_TO_ADDR
// station := GetBase ( GetTag ( 200 + side * 10 + 15 ) ) ;
10143: LD_ADDR_VAR 0 7
10147: PUSH
10148: LD_INT 200
10150: PUSH
10151: LD_VAR 0 1
10155: PUSH
10156: LD_INT 10
10158: MUL
10159: PLUS
10160: PUSH
10161: LD_INT 15
10163: PLUS
10164: PPUSH
10165: CALL_OW 110
10169: PPUSH
10170: CALL_OW 274
10174: ST_TO_ADDR
// if station and ( GetResources ( station ) [ 3 ] >= GetTag ( 206 ) ) then
10175: LD_VAR 0 7
10179: PUSH
10180: LD_VAR 0 7
10184: PPUSH
10185: CALL_OW 279
10189: PUSH
10190: LD_INT 3
10192: ARRAY
10193: PUSH
10194: LD_INT 206
10196: PPUSH
10197: CALL_OW 110
10201: GREATEREQUAL
10202: AND
10203: IFFALSE 10259
// begin ArtContamination ( p1 , p2 , 15 ) ;
10205: LD_VAR 0 2
10209: PPUSH
10210: LD_VAR 0 3
10214: PPUSH
10215: LD_INT 15
10217: PPUSH
10218: CALL_OW 495
// SetResourceType ( station , mat_siberit , GetResources ( station ) [ 3 ] - GetTag ( 206 ) ) ;
10222: LD_VAR 0 7
10226: PPUSH
10227: LD_INT 3
10229: PPUSH
10230: LD_VAR 0 7
10234: PPUSH
10235: CALL_OW 279
10239: PUSH
10240: LD_INT 3
10242: ARRAY
10243: PUSH
10244: LD_INT 206
10246: PPUSH
10247: CALL_OW 110
10251: MINUS
10252: PPUSH
10253: CALL_OW 277
// end else
10257: GO 10267
// vysledek := false ;
10259: LD_ADDR_VAR 0 5
10263: PUSH
10264: LD_INT 0
10266: ST_TO_ADDR
// result := vysledek ;
10267: LD_ADDR_VAR 0 4
10271: PUSH
10272: LD_VAR 0 5
10276: ST_TO_ADDR
// end ;
10277: LD_VAR 0 4
10281: RET
// every 0 0$5 marked 20 do var art , side , recharge ;
10282: GO 10284
10284: DISABLE
10285: LD_INT 0
10287: PPUSH
10288: PPUSH
10289: PPUSH
// begin for art = 0 to artefact_number do
10290: LD_ADDR_VAR 0 1
10294: PUSH
10295: DOUBLE
10296: LD_INT 0
10298: DEC
10299: ST_TO_ADDR
10300: LD_EXP 52
10304: PUSH
10305: FOR_TO
10306: IFFALSE 10440
// for side = 1 to Side_Positions do
10308: LD_ADDR_VAR 0 2
10312: PUSH
10313: DOUBLE
10314: LD_INT 1
10316: DEC
10317: ST_TO_ADDR
10318: LD_EXP 39
10322: PUSH
10323: FOR_TO
10324: IFFALSE 10436
// begin recharge := art * 100 + side * 10 + 13 ;
10326: LD_ADDR_VAR 0 3
10330: PUSH
10331: LD_VAR 0 1
10335: PUSH
10336: LD_INT 100
10338: MUL
10339: PUSH
10340: LD_VAR 0 2
10344: PUSH
10345: LD_INT 10
10347: MUL
10348: PLUS
10349: PUSH
10350: LD_INT 13
10352: PLUS
10353: ST_TO_ADDR
// if Side_Positions [ side ] and ( GetTag ( recharge ) > 0 ) then
10354: LD_EXP 39
10358: PUSH
10359: LD_VAR 0 2
10363: ARRAY
10364: PUSH
10365: LD_VAR 0 3
10369: PPUSH
10370: CALL_OW 110
10374: PUSH
10375: LD_INT 0
10377: GREATER
10378: AND
10379: IFFALSE 10434
// begin SetTag ( recharge , GetTag ( recharge ) - 1 ) ;
10381: LD_VAR 0 3
10385: PPUSH
10386: LD_VAR 0 3
10390: PPUSH
10391: CALL_OW 110
10395: PUSH
10396: LD_INT 1
10398: MINUS
10399: PPUSH
10400: CALL_OW 109
// if not GetTag ( recharge ) then
10404: LD_VAR 0 3
10408: PPUSH
10409: CALL_OW 110
10413: NOT
10414: IFFALSE 10434
// Highlight_Artefact ( side , art + 1 ) ;
10416: LD_VAR 0 2
10420: PPUSH
10421: LD_VAR 0 1
10425: PUSH
10426: LD_INT 1
10428: PLUS
10429: PPUSH
10430: CALL 8466 0 2
// end ; end ;
10434: GO 10323
10436: POP
10437: POP
10438: GO 10305
10440: POP
10441: POP
// enable ;
10442: ENABLE
// end ; end_of_file
10443: PPOPN 3
10445: END
// function DestroyArtefact ( hex , art ) ; var base , side ; begin
10446: LD_INT 0
10448: PPUSH
10449: PPUSH
10450: PPUSH
// MoveAreaXY ( artefact_end , hex [ 1 ] , hex [ 2 ] ) ;
10451: LD_INT 14
10453: PPUSH
10454: LD_VAR 0 1
10458: PUSH
10459: LD_INT 1
10461: ARRAY
10462: PPUSH
10463: LD_VAR 0 1
10467: PUSH
10468: LD_INT 2
10470: ARRAY
10471: PPUSH
10472: CALL_OW 425
// EffectTeleport ( hex [ 1 ] , hex [ 2 ] ) ;
10476: LD_VAR 0 1
10480: PUSH
10481: LD_INT 1
10483: ARRAY
10484: PPUSH
10485: LD_VAR 0 1
10489: PUSH
10490: LD_INT 2
10492: ARRAY
10493: PPUSH
10494: CALL_OW 494
// Wait ( 30 ) ;
10498: LD_INT 30
10500: PPUSH
10501: CALL_OW 67
// EraseResourceArea ( artefact_end , mat_artefact ) ;
10505: LD_INT 14
10507: PPUSH
10508: LD_INT 4
10510: PPUSH
10511: CALL_OW 286
// base := ( art - 1 ) * 100 ;
10515: LD_ADDR_VAR 0 4
10519: PUSH
10520: LD_VAR 0 2
10524: PUSH
10525: LD_INT 1
10527: MINUS
10528: PUSH
10529: LD_INT 100
10531: MUL
10532: ST_TO_ADDR
// if GetTag ( base + 11 ) then
10533: LD_VAR 0 4
10537: PUSH
10538: LD_INT 11
10540: PLUS
10541: PPUSH
10542: CALL_OW 110
10546: IFFALSE 10684
// begin side := GetSide ( GetTag ( base + 11 ) ) ;
10548: LD_ADDR_VAR 0 5
10552: PUSH
10553: LD_VAR 0 4
10557: PUSH
10558: LD_INT 11
10560: PLUS
10561: PPUSH
10562: CALL_OW 110
10566: PPUSH
10567: CALL_OW 255
10571: ST_TO_ADDR
// if GetTag ( base + 12 ) then
10572: LD_VAR 0 4
10576: PUSH
10577: LD_INT 12
10579: PLUS
10580: PPUSH
10581: CALL_OW 110
10585: IFFALSE 10628
// begin ComCancel ( GetTag ( base + 11 ) ) ;
10587: LD_VAR 0 4
10591: PUSH
10592: LD_INT 11
10594: PLUS
10595: PPUSH
10596: CALL_OW 110
10600: PPUSH
10601: CALL_OW 127
// Wait ( 10 ) ;
10605: LD_INT 10
10607: PPUSH
10608: CALL_OW 67
// SetTag ( base + 12 , false ) ;
10612: LD_VAR 0 4
10616: PUSH
10617: LD_INT 12
10619: PLUS
10620: PPUSH
10621: LD_INT 0
10623: PPUSH
10624: CALL_OW 109
// end ; if not GetTag ( base + side * 10 + 11 ) then
10628: LD_VAR 0 4
10632: PUSH
10633: LD_VAR 0 5
10637: PUSH
10638: LD_INT 10
10640: MUL
10641: PLUS
10642: PUSH
10643: LD_INT 11
10645: PLUS
10646: PPUSH
10647: CALL_OW 110
10651: NOT
10652: IFFALSE 10668
// DeInit_Lab ( side , art ) ;
10654: LD_VAR 0 5
10658: PPUSH
10659: LD_VAR 0 2
10663: PPUSH
10664: CALL 9156 0 2
// SetTag ( base + 11 , 0 ) ;
10668: LD_VAR 0 4
10672: PUSH
10673: LD_INT 11
10675: PLUS
10676: PPUSH
10677: LD_INT 0
10679: PPUSH
10680: CALL_OW 109
// end ; end ;
10684: LD_VAR 0 3
10688: RET
// every 0 0$5 marked 5 do var hex , un ;
10689: GO 10691
10691: DISABLE
10692: LD_INT 0
10694: PPUSH
10695: PPUSH
// begin wait ( 3 3$0 ) ;
10696: LD_INT 6300
10698: PPUSH
10699: CALL_OW 67
// if GetTag ( 09 ) then
10703: LD_INT 9
10705: PPUSH
10706: CALL_OW 110
10710: IFFALSE 10749
// hex := [ GetX ( GetTag ( 13 ) ) , GetY ( GetTag ( 13 ) ) ] else
10712: LD_ADDR_VAR 0 1
10716: PUSH
10717: LD_INT 13
10719: PPUSH
10720: CALL_OW 110
10724: PPUSH
10725: CALL_OW 250
10729: PUSH
10730: LD_INT 13
10732: PPUSH
10733: CALL_OW 110
10737: PPUSH
10738: CALL_OW 251
10742: PUSH
10743: EMPTY
10744: LIST
10745: LIST
10746: ST_TO_ADDR
10747: GO 10768
// hex := FindArtifact ( artefact_size [ 1 ] ) ;
10749: LD_ADDR_VAR 0 1
10753: PUSH
10754: LD_EXP 54
10758: PUSH
10759: LD_INT 1
10761: ARRAY
10762: PPUSH
10763: CALL_OW 469
10767: ST_TO_ADDR
// if not InArea ( hex [ 1 ] , hex [ 2 ] , artefact_area ) then
10768: LD_VAR 0 1
10772: PUSH
10773: LD_INT 1
10775: ARRAY
10776: PPUSH
10777: LD_VAR 0 1
10781: PUSH
10782: LD_INT 2
10784: ARRAY
10785: PPUSH
10786: LD_INT 13
10788: PPUSH
10789: CALL_OW 309
10793: NOT
10794: IFFALSE 11071
// begin if GetTag ( 09 ) then
10796: LD_INT 9
10798: PPUSH
10799: CALL_OW 110
10803: IFFALSE 10850
// begin SetCargo ( GetTag ( 13 ) , mat_artefact , - artefact_size [ 1 ] ) ;
10805: LD_INT 13
10807: PPUSH
10808: CALL_OW 110
10812: PPUSH
10813: LD_INT 4
10815: PPUSH
10816: LD_EXP 54
10820: PUSH
10821: LD_INT 1
10823: ARRAY
10824: NEG
10825: PPUSH
10826: CALL_OW 290
// SetTag ( 09 , 0 ) ;
10830: LD_INT 9
10832: PPUSH
10833: LD_INT 0
10835: PPUSH
10836: CALL_OW 109
// SetTag ( 13 , 0 ) ;
10840: LD_INT 13
10842: PPUSH
10843: LD_INT 0
10845: PPUSH
10846: CALL_OW 109
// end ; DestroyArtefact ( hex , 1 ) ;
10850: LD_VAR 0 1
10854: PPUSH
10855: LD_INT 1
10857: PPUSH
10858: CALL 10446 0 2
// wait ( 5 ) ;
10862: LD_INT 5
10864: PPUSH
10865: CALL_OW 67
// repeat hex := RandHexArea ( artefact_area , false ) ;
10869: LD_ADDR_VAR 0 1
10873: PUSH
10874: LD_INT 13
10876: PPUSH
10877: LD_INT 0
10879: PPUSH
10880: CALL_OW 16
10884: ST_TO_ADDR
// un := HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
10885: LD_ADDR_VAR 0 2
10889: PUSH
10890: LD_VAR 0 1
10894: PUSH
10895: LD_INT 1
10897: ARRAY
10898: PPUSH
10899: LD_VAR 0 1
10903: PUSH
10904: LD_INT 2
10906: ARRAY
10907: PPUSH
10908: CALL_OW 428
10912: ST_TO_ADDR
// if ( un > 0 ) and ( GetType ( un ) = unit_building ) then
10913: LD_VAR 0 2
10917: PUSH
10918: LD_INT 0
10920: GREATER
10921: PUSH
10922: LD_VAR 0 2
10926: PPUSH
10927: CALL_OW 247
10931: PUSH
10932: LD_INT 3
10934: EQUAL
10935: AND
10936: IFFALSE 10980
// begin KillUnit ( un ) ;
10938: LD_VAR 0 2
10942: PPUSH
10943: CALL_OW 66
// while HexInfo ( hex [ 1 ] , hex [ 2 ] ) do
10947: LD_VAR 0 1
10951: PUSH
10952: LD_INT 1
10954: ARRAY
10955: PPUSH
10956: LD_VAR 0 1
10960: PUSH
10961: LD_INT 2
10963: ARRAY
10964: PPUSH
10965: CALL_OW 428
10969: IFFALSE 10980
// wait ( 10 ) ;
10971: LD_INT 10
10973: PPUSH
10974: CALL_OW 67
10978: GO 10947
// end ; until not HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
10980: LD_VAR 0 1
10984: PUSH
10985: LD_INT 1
10987: ARRAY
10988: PPUSH
10989: LD_VAR 0 1
10993: PUSH
10994: LD_INT 2
10996: ARRAY
10997: PPUSH
10998: CALL_OW 428
11002: NOT
11003: IFFALSE 10869
// EffectTeleport ( hex [ 1 ] , hex [ 2 ] ) ;
11005: LD_VAR 0 1
11009: PUSH
11010: LD_INT 1
11012: ARRAY
11013: PPUSH
11014: LD_VAR 0 1
11018: PUSH
11019: LD_INT 2
11021: ARRAY
11022: PPUSH
11023: CALL_OW 494
// wait ( 30 ) ;
11027: LD_INT 30
11029: PPUSH
11030: CALL_OW 67
// CreateResourcesXY ( mat_artefact , artefact_size [ 1 ] , hex [ 1 ] , hex [ 2 ] , false ) ;
11034: LD_INT 4
11036: PPUSH
11037: LD_EXP 54
11041: PUSH
11042: LD_INT 1
11044: ARRAY
11045: PPUSH
11046: LD_VAR 0 1
11050: PUSH
11051: LD_INT 1
11053: ARRAY
11054: PPUSH
11055: LD_VAR 0 1
11059: PUSH
11060: LD_INT 2
11062: ARRAY
11063: PPUSH
11064: LD_INT 0
11066: PPUSH
11067: CALL_OW 58
// end ; enable ;
11071: ENABLE
// end ;
11072: PPOPN 2
11074: END
// every 0 0$5 marked 6 do var hex , un ;
11075: GO 11077
11077: DISABLE
11078: LD_INT 0
11080: PPUSH
11081: PPUSH
// begin wait ( 3 3$30 ) ;
11082: LD_INT 7350
11084: PPUSH
11085: CALL_OW 67
// if GetTag ( 109 ) then
11089: LD_INT 109
11091: PPUSH
11092: CALL_OW 110
11096: IFFALSE 11135
// hex := [ GetX ( GetTag ( 113 ) ) , GetY ( GetTag ( 113 ) ) ] else
11098: LD_ADDR_VAR 0 1
11102: PUSH
11103: LD_INT 113
11105: PPUSH
11106: CALL_OW 110
11110: PPUSH
11111: CALL_OW 250
11115: PUSH
11116: LD_INT 113
11118: PPUSH
11119: CALL_OW 110
11123: PPUSH
11124: CALL_OW 251
11128: PUSH
11129: EMPTY
11130: LIST
11131: LIST
11132: ST_TO_ADDR
11133: GO 11154
// hex := FindArtifact ( artefact_size [ 2 ] ) ;
11135: LD_ADDR_VAR 0 1
11139: PUSH
11140: LD_EXP 54
11144: PUSH
11145: LD_INT 2
11147: ARRAY
11148: PPUSH
11149: CALL_OW 469
11153: ST_TO_ADDR
// if not InArea ( hex [ 1 ] , hex [ 2 ] , artefact_area ) then
11154: LD_VAR 0 1
11158: PUSH
11159: LD_INT 1
11161: ARRAY
11162: PPUSH
11163: LD_VAR 0 1
11167: PUSH
11168: LD_INT 2
11170: ARRAY
11171: PPUSH
11172: LD_INT 13
11174: PPUSH
11175: CALL_OW 309
11179: NOT
11180: IFFALSE 11457
// begin if GetTag ( 109 ) then
11182: LD_INT 109
11184: PPUSH
11185: CALL_OW 110
11189: IFFALSE 11236
// begin SetCargo ( GetTag ( 113 ) , mat_artefact , - artefact_size [ 1 ] ) ;
11191: LD_INT 113
11193: PPUSH
11194: CALL_OW 110
11198: PPUSH
11199: LD_INT 4
11201: PPUSH
11202: LD_EXP 54
11206: PUSH
11207: LD_INT 1
11209: ARRAY
11210: NEG
11211: PPUSH
11212: CALL_OW 290
// SetTag ( 109 , 0 ) ;
11216: LD_INT 109
11218: PPUSH
11219: LD_INT 0
11221: PPUSH
11222: CALL_OW 109
// SetTag ( 113 , 0 ) ;
11226: LD_INT 113
11228: PPUSH
11229: LD_INT 0
11231: PPUSH
11232: CALL_OW 109
// end ; DestroyArtefact ( hex , 2 ) ;
11236: LD_VAR 0 1
11240: PPUSH
11241: LD_INT 2
11243: PPUSH
11244: CALL 10446 0 2
// wait ( 5 ) ;
11248: LD_INT 5
11250: PPUSH
11251: CALL_OW 67
// repeat hex := RandHexArea ( artefact_area , false ) ;
11255: LD_ADDR_VAR 0 1
11259: PUSH
11260: LD_INT 13
11262: PPUSH
11263: LD_INT 0
11265: PPUSH
11266: CALL_OW 16
11270: ST_TO_ADDR
// un := HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
11271: LD_ADDR_VAR 0 2
11275: PUSH
11276: LD_VAR 0 1
11280: PUSH
11281: LD_INT 1
11283: ARRAY
11284: PPUSH
11285: LD_VAR 0 1
11289: PUSH
11290: LD_INT 2
11292: ARRAY
11293: PPUSH
11294: CALL_OW 428
11298: ST_TO_ADDR
// if ( un > 0 ) and ( GetType ( un ) = unit_building ) then
11299: LD_VAR 0 2
11303: PUSH
11304: LD_INT 0
11306: GREATER
11307: PUSH
11308: LD_VAR 0 2
11312: PPUSH
11313: CALL_OW 247
11317: PUSH
11318: LD_INT 3
11320: EQUAL
11321: AND
11322: IFFALSE 11366
// begin KillUnit ( un ) ;
11324: LD_VAR 0 2
11328: PPUSH
11329: CALL_OW 66
// while HexInfo ( hex [ 1 ] , hex [ 2 ] ) do
11333: LD_VAR 0 1
11337: PUSH
11338: LD_INT 1
11340: ARRAY
11341: PPUSH
11342: LD_VAR 0 1
11346: PUSH
11347: LD_INT 2
11349: ARRAY
11350: PPUSH
11351: CALL_OW 428
11355: IFFALSE 11366
// wait ( 10 ) ;
11357: LD_INT 10
11359: PPUSH
11360: CALL_OW 67
11364: GO 11333
// end ; until not HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
11366: LD_VAR 0 1
11370: PUSH
11371: LD_INT 1
11373: ARRAY
11374: PPUSH
11375: LD_VAR 0 1
11379: PUSH
11380: LD_INT 2
11382: ARRAY
11383: PPUSH
11384: CALL_OW 428
11388: NOT
11389: IFFALSE 11255
// EffectTeleport ( hex [ 1 ] , hex [ 2 ] ) ;
11391: LD_VAR 0 1
11395: PUSH
11396: LD_INT 1
11398: ARRAY
11399: PPUSH
11400: LD_VAR 0 1
11404: PUSH
11405: LD_INT 2
11407: ARRAY
11408: PPUSH
11409: CALL_OW 494
// wait ( 30 ) ;
11413: LD_INT 30
11415: PPUSH
11416: CALL_OW 67
// CreateResourcesXY ( mat_artefact , artefact_size [ 2 ] , hex [ 1 ] , hex [ 2 ] , false ) ;
11420: LD_INT 4
11422: PPUSH
11423: LD_EXP 54
11427: PUSH
11428: LD_INT 2
11430: ARRAY
11431: PPUSH
11432: LD_VAR 0 1
11436: PUSH
11437: LD_INT 1
11439: ARRAY
11440: PPUSH
11441: LD_VAR 0 1
11445: PUSH
11446: LD_INT 2
11448: ARRAY
11449: PPUSH
11450: LD_INT 0
11452: PPUSH
11453: CALL_OW 58
// end ; enable ;
11457: ENABLE
// end ;
11458: PPOPN 2
11460: END
// every 0 0$5 marked 7 do var hex , un ;
11461: GO 11463
11463: DISABLE
11464: LD_INT 0
11466: PPUSH
11467: PPUSH
// begin wait ( 4 4$0 ) ;
11468: LD_INT 8400
11470: PPUSH
11471: CALL_OW 67
// if GetTag ( 209 ) then
11475: LD_INT 209
11477: PPUSH
11478: CALL_OW 110
11482: IFFALSE 11521
// hex := [ GetX ( GetTag ( 213 ) ) , GetY ( GetTag ( 213 ) ) ] else
11484: LD_ADDR_VAR 0 1
11488: PUSH
11489: LD_INT 213
11491: PPUSH
11492: CALL_OW 110
11496: PPUSH
11497: CALL_OW 250
11501: PUSH
11502: LD_INT 213
11504: PPUSH
11505: CALL_OW 110
11509: PPUSH
11510: CALL_OW 251
11514: PUSH
11515: EMPTY
11516: LIST
11517: LIST
11518: ST_TO_ADDR
11519: GO 11540
// hex := FindArtifact ( artefact_size [ 3 ] ) ;
11521: LD_ADDR_VAR 0 1
11525: PUSH
11526: LD_EXP 54
11530: PUSH
11531: LD_INT 3
11533: ARRAY
11534: PPUSH
11535: CALL_OW 469
11539: ST_TO_ADDR
// if not InArea ( hex [ 1 ] , hex [ 2 ] , artefact_area ) then
11540: LD_VAR 0 1
11544: PUSH
11545: LD_INT 1
11547: ARRAY
11548: PPUSH
11549: LD_VAR 0 1
11553: PUSH
11554: LD_INT 2
11556: ARRAY
11557: PPUSH
11558: LD_INT 13
11560: PPUSH
11561: CALL_OW 309
11565: NOT
11566: IFFALSE 11843
// begin if GetTag ( 209 ) then
11568: LD_INT 209
11570: PPUSH
11571: CALL_OW 110
11575: IFFALSE 11622
// begin SetCargo ( GetTag ( 213 ) , mat_artefact , - artefact_size [ 1 ] ) ;
11577: LD_INT 213
11579: PPUSH
11580: CALL_OW 110
11584: PPUSH
11585: LD_INT 4
11587: PPUSH
11588: LD_EXP 54
11592: PUSH
11593: LD_INT 1
11595: ARRAY
11596: NEG
11597: PPUSH
11598: CALL_OW 290
// SetTag ( 209 , 0 ) ;
11602: LD_INT 209
11604: PPUSH
11605: LD_INT 0
11607: PPUSH
11608: CALL_OW 109
// SetTag ( 213 , 0 ) ;
11612: LD_INT 213
11614: PPUSH
11615: LD_INT 0
11617: PPUSH
11618: CALL_OW 109
// end ; DestroyArtefact ( hex , 3 ) ;
11622: LD_VAR 0 1
11626: PPUSH
11627: LD_INT 3
11629: PPUSH
11630: CALL 10446 0 2
// wait ( 5 ) ;
11634: LD_INT 5
11636: PPUSH
11637: CALL_OW 67
// repeat hex := RandHexArea ( artefact_area , false ) ;
11641: LD_ADDR_VAR 0 1
11645: PUSH
11646: LD_INT 13
11648: PPUSH
11649: LD_INT 0
11651: PPUSH
11652: CALL_OW 16
11656: ST_TO_ADDR
// un := HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
11657: LD_ADDR_VAR 0 2
11661: PUSH
11662: LD_VAR 0 1
11666: PUSH
11667: LD_INT 1
11669: ARRAY
11670: PPUSH
11671: LD_VAR 0 1
11675: PUSH
11676: LD_INT 2
11678: ARRAY
11679: PPUSH
11680: CALL_OW 428
11684: ST_TO_ADDR
// if ( un > 0 ) and ( GetType ( un ) = unit_building ) then
11685: LD_VAR 0 2
11689: PUSH
11690: LD_INT 0
11692: GREATER
11693: PUSH
11694: LD_VAR 0 2
11698: PPUSH
11699: CALL_OW 247
11703: PUSH
11704: LD_INT 3
11706: EQUAL
11707: AND
11708: IFFALSE 11752
// begin KillUnit ( un ) ;
11710: LD_VAR 0 2
11714: PPUSH
11715: CALL_OW 66
// while HexInfo ( hex [ 1 ] , hex [ 2 ] ) do
11719: LD_VAR 0 1
11723: PUSH
11724: LD_INT 1
11726: ARRAY
11727: PPUSH
11728: LD_VAR 0 1
11732: PUSH
11733: LD_INT 2
11735: ARRAY
11736: PPUSH
11737: CALL_OW 428
11741: IFFALSE 11752
// wait ( 10 ) ;
11743: LD_INT 10
11745: PPUSH
11746: CALL_OW 67
11750: GO 11719
// end ; until not HexInfo ( hex [ 1 ] , hex [ 2 ] ) ;
11752: LD_VAR 0 1
11756: PUSH
11757: LD_INT 1
11759: ARRAY
11760: PPUSH
11761: LD_VAR 0 1
11765: PUSH
11766: LD_INT 2
11768: ARRAY
11769: PPUSH
11770: CALL_OW 428
11774: NOT
11775: IFFALSE 11641
// EffectTeleport ( hex [ 1 ] , hex [ 2 ] ) ;
11777: LD_VAR 0 1
11781: PUSH
11782: LD_INT 1
11784: ARRAY
11785: PPUSH
11786: LD_VAR 0 1
11790: PUSH
11791: LD_INT 2
11793: ARRAY
11794: PPUSH
11795: CALL_OW 494
// wait ( 30 ) ;
11799: LD_INT 30
11801: PPUSH
11802: CALL_OW 67
// CreateResourcesXY ( mat_artefact , artefact_size [ 3 ] , hex [ 1 ] , hex [ 2 ] , false ) ;
11806: LD_INT 4
11808: PPUSH
11809: LD_EXP 54
11813: PUSH
11814: LD_INT 3
11816: ARRAY
11817: PPUSH
11818: LD_VAR 0 1
11822: PUSH
11823: LD_INT 1
11825: ARRAY
11826: PPUSH
11827: LD_VAR 0 1
11831: PUSH
11832: LD_INT 2
11834: ARRAY
11835: PPUSH
11836: LD_INT 0
11838: PPUSH
11839: CALL_OW 58
// end ; enable ;
11843: ENABLE
// end ; end_of_file
11844: PPOPN 2
11846: END
// export function Disable_All_Games ; begin
11847: LD_INT 0
11849: PPUSH
// disable ( 1 ) ;
11850: LD_INT 1
11852: DISABLE_MARKED
// disable ( 2 ) ;
11853: LD_INT 2
11855: DISABLE_MARKED
// disable ( 3 ) ;
11856: LD_INT 3
11858: DISABLE_MARKED
// disable ( 4 ) ;
11859: LD_INT 4
11861: DISABLE_MARKED
// disable ( 5 ) ;
11862: LD_INT 5
11864: DISABLE_MARKED
// disable ( 6 ) ;
11865: LD_INT 6
11867: DISABLE_MARKED
// disable ( 7 ) ;
11868: LD_INT 7
11870: DISABLE_MARKED
// disable ( 10 ) ;
11871: LD_INT 10
11873: DISABLE_MARKED
// disable ( 20 ) ;
11874: LD_INT 20
11876: DISABLE_MARKED
// disable ( 98 ) ;
11877: LD_INT 98
11879: DISABLE_MARKED
// disable ( 99 ) ;
11880: LD_INT 99
11882: DISABLE_MARKED
// end ;
11883: LD_VAR 0 1
11887: RET
